DP문제입니다.
일단 이걸 직접 손으로 좀 써내려가다보면 피보나치 수열이 나오긴 합니다만...
그냥 문제에 적힌 그대로 풀었습니다. 결과적으로는 비슷하다고 해야하나 같다해야하나 그렇습니다.
일단
1자리 수는 1밖에 없음.
2자리 수는 1 - 0 밖에 없음
3자리 수는 1 - 0 - 0
1 - 0 - 1 존재.
4자리 수는 3자리수 맨뒤 0 -> 0, 1 2가지 가능
3자리수 맨뒤 1 -> 0 1가지 가능. 총 3가지 가능
그림으로 보면서 정리하면
현재 자리수( D[0][N] + D[1][N] ) 의 이천수의 갯수를 구하기 위해선
D[0][N] = D[0][N-1] + D[1][N-1]
D[1][N] = D[0][N-1]
두 개의 값을 구해 더하면 됩니다.
public class Q2193 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
long[][] arr = new long[2][num+1];
arr[0][1] = 0;
arr[1][1] = 1;
for(int i=2; i<=num; i++) {
arr[0][i] = arr[0][i-1] + arr[1][i-1];
arr[1][i] = arr[0][i-1];
}
System.out.println(arr[0][num]+arr[1][num]);
}
}
'짱구 굴리기 (Q) - ' 카테고리의 다른 글
[백준 1924] 2007년 (0) | 2019.04.07 |
---|---|
[백준 2839] 설탕 배달 (0) | 2019.04.07 |
[백준 1932] 정수 삼각형 (0) | 2019.04.04 |
[백준 7568] 덩치 (0) | 2019.04.04 |
[백준 1003] 피보나치 함수 (0) | 2019.04.03 |