Baekjoon
#2193. 이친수
http://www.acmicpc.com/problem/2193
개인적으로 오르막수나 쉬운 계단 수 문제보다 훨씬 쉽다고 생각했다. 이미 앞에 두 문제를 어떻게 접근하는지 알고 있어서 그런 것일 수도 있겠지만 코드 자체도 훨씬 간단하고 이해하기도 쉬웠다. 이 문제도 마찬가지로 배열d를 정의한다.
d[N][k] : N자리 k로 끝나는 이친수 개수 (k=0, 1)
이 문제는 k에 올 수 있는 수가 0 또는 1 두 가지 경우이므로 생각해보기가 더 쉬웠다.
먼저 N=1 일때 이친수는 0으로 시작할 수 없다고 했으므로 d[1][1] = 1 , d[1][0] = 0 으로 정의된다.
2자리부터 차근차근 생각해보면 다음과 같다.
Ⅰ. d[N][0] = d[N-1][0] + d[N-1][1]
Ⅱ. d[N][1] = d[N-1][0]
구하고자 하는 답은 N자리 이친수의 개수 즉, Ⅰ+Ⅱ이다.
제출했을때도 한번에 정답을 맞출 수 있었다.
<전체코드>
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class _2193 { static long[][] d; static int n; static long ans; public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); n = Integer.parseInt(br.readLine()); d = new long[n+1][2]; d[1][0]=0; d[1][1]=1; for(int i=2;i<=n;i++) { d[i][0] = d[i-1][0] + d[i-1][1]; d[i][1] = d[i-1][0]; } ans = d[n][0] + d[n][1]; System.out.println(ans); } }
'Algorithms > Baekjoon OJ' 카테고리의 다른 글
[Baekjoon]2579.계단오르기(DP) (0) | 2019.01.16 |
---|---|
[Baekjoon]11054.가장 긴 바이토닉 부분 수열(DP) (0) | 2019.01.16 |
[Baekjoon]11053.가장 긴 증가하는 부분수열(DP) (0) | 2019.01.15 |
[Baekjoon]9465.스티커(DP) (0) | 2019.01.13 |
[Baekjoon]11057.오르막수(DP) (0) | 2019.01.11 |