동적 계획법 예제 - 3
Last updated
Last updated
N(자릿수)
dp테이블
# dp[i][0] = 길이 i에서 0으로 끝나는 이친수 개수
# dp[i][1] = 길이 i에서 1로 끝나는 이친수 개수
dp[1][1] = 1 # 1자리 1, 이친수 조건 성립
dp[1][0] = 0 # 1자리 0, 이친수 조건 미성립(0으로 시작히지 않는다.)
for i 2~N:
i번째 0으로 끝나는 개수 = i-1에서 0으로 끝나는 개수 + i-1에서 1로 끝나는 개수
i번째 1로 끝나는 개수 = i-1에서 0으로 끝나는 개수
N번째에서 0으로 끝나는 개수 + N번째에서 1로 끝나는 개수 출력import sys
input = sys.stdin.readline
N = int(input())
dp = [[0 for _ in range(2)] for _ in range(N + 1)]
dp[1][1] = 1 # 이친수
dp[1][0] = 0 # 0으로 시작할 수 없음
for i in range(2, N + 1):
dp[i][0] = dp[i-1][0] + dp[i-1][1]
dp[i][1] = dp[i-1][0]
print(dp[N][0] + dp[N][1])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[N + 1][2];
dp[1][1] = 1;
dp[1][0] = 0;
for (int i = 2; i <= N; i++) {
dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
dp[i][1] = dp[i - 1][0];
}
System.out.println(dp[N][0] + dp[N][1]);
}
}