Computer Science/Algorithm
[BOJ] 2193 - 이친수
JG Ahn
2020. 6. 14. 19:58
풀이
DP 문제입니다. 1번째에는 무조건 1이 오고 2번째부터 0과 1이 나올 수 있는데 1이 두 번 연속으로만 나오지 않으면 됩니다.
dp 변수에 현재 위치가 0일 때와 1일 때의 경우의 수를 각각 저장할 것입니다.
현재 위치가 0이라면 이전 자리는 0, 1 두 가지 모두 올 수 있습니다.
따라서 dp [i][0] = dp [i-1][0] + dp [i-1][1] 이 됩니다.
현재 위치가 1이라면 이전 자리는 무조건 0이어야 합니다.
따라서 dp [i][1] = dp [i-1][0] 이 됩니다.
출력으로는 현재 위치가 0인 경우의 수와 현재 위치가 1인 경우의 수를 더하여 출력하면 됩니다.
변수
dp [i][0] = i자리에서 0인 경우의 수
dp [i][1] = i자리에서 1인 경우의 수
Python3 Code
n = int(input())
dp = [[0] * 2 for i in range(n+1)]
dp[1] = [0, 1]
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(sum(dp[n]))