티스토리 뷰

알고리즘/백준

[BAEKJOON]2193 이친수

응애~ 개발자 2024. 1. 29. 05:21
728x90
반응형

문제 요약

  • 알고리즘 분류: dp
  • 난이도: Silver3
  • 문제내용:
    • 이친수는 0으로 시작하지 않는다.
    • 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다.
  • 사이트: https://www.acmicpc.net/problem/2193
 

2193번: 이친수

0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않

www.acmicpc.net

문제풀이

 이번 문제에는 모든 경우의 수를 구해서 풀기가 힘들다. 10^N개 탐색 하면 시간 초과로 나올 것이다. 그래서 이번 문제는 DP로 풀어야 통과 되는 문제이다. DP랑 관련된것은 자세한 내용은 아래의 글로 확인 해보면된다.

https://jih3508.tistory.com/89

 

[알고리즘 이론] 동적계획법(Dynamic Programming, DP)

이론 이번에 볼 알고리즘은 동적계획법(Dynamic Programming)이다. 이 알고리즘은 줄어서 dp라고 많이 불리고 코딩테스트에도 자주 나오는 유형이라서 무조건 알아야 되는 알고즘이다. 동적계획법 알

jih3508.tistory.com

 

문제 접근방법

 dp는 구현보다 아이디어를 요구하는 문제로서 생각만 한다면 코드 구현은 간단한다. 데이터가 최대 1000개이고 초당 2천만번 연산이 가능하다고 가정할때 O(N )으로 풀어야 통과가 될것이다.  일단 아래의 그림으로 N = 7까지 경우의 수를 확인 해보자

 여기서 확인 해봐야 할 경우는 뒤에 0과 1 올 경우만 확인 해보면 된다. 0은 앞에 어떤 수가 오던 간에 다 가능한데 1은 붙일수 없기 때문에 01로 와야 한다. 그래서 아래 그림 처럼 구조가 나온다.

위 2가지 경우수를 합하면된다. 즉 DP[N] = DP[N - 1] + DP[N + 2]라는 결과가 나온다. 

 

Code

Python

N = int(input())
dp = [0] * 91
dp[1], dp[2] = 1, 1
for i in range(3, N + 1):
    dp[i] = dp[i - 1] + dp[i - 2]

print(dp[N])

Java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		
		long[] dp = new long[91];
		dp[0] = 0;
		dp[1] = 1;
		dp[2] = 1;

		for(int i = 3; i <= N; i++) {
			dp[i] = dp[i - 1] + dp[i - 2];
		}
		
		System.out.println(dp[N]);
		
	}
	
}
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[BAEKJOON]9251 LCS  (0) 2024.02.15
[BAEKJOON]14606 피자 (Small)  (0) 2024.02.01
[BAEKJOON]21736 헌내기는 친구가 필요해  (4) 2024.01.13
[BAEKJOON]14940 쉬운 최단거리  (1) 2024.01.12
[BAEKJOON]18110 solved.ac  (0) 2024.01.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함