[백준 10844번] 쉬운 계단 수
문제
45656이란 수를 보자.
이 수는 인접한 모든 자리수의 차이가 1이 난다. 이런 수를 계단 수라고 한다.
세준이는 수의 길이가 N인 계단 수가 몇 개 있는지 궁금해졌다.
N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. (0으로 시작하는 수는 없다.)
풀이
느낌이 안올 땐 손으로 그려보는 것 만큼 좋은 게 없다. 아이패드에 그려보았다.
되게 무식한 방법을 쓴 것 같지만, 정말 감이 바로왔다. 점화식까지 바로 세웠다.
근데 처음에 틀렸다. 코드 한줄 때문에 틀렸다!
틀린 코드
N = int(input())
dp = [[0 for _ in range(10)] for _ in range(N)]
dp[0][0] = 0
for i in range(1,10):
dp[0][i] = 1
for i in range(1,N):
dp[i][0] = dp[i-1][1]
dp[i][9] = dp[i-1][8]
for j in range(1,9):
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
answer = 0
for i in range(10):
answer += dp[N-1][i] % 1000000000
print(answer)
이 코드가 왜 틀렸냐 하면, 마지막에 answer값을 구할 때, answer값에다가 dp값을 모듈러한 값을 더하기 때문에, dp값은 10억보다 커질 수 있다.
고로 계산 순서가 틀려버린 것이다.
정답 코드
N = int(input())
dp = [[0 for _ in range(10)] for _ in range(N)]
dp[0][0] = 0
for i in range(1,10):
dp[0][i] = 1
for i in range(1,N):
dp[i][0] = dp[i-1][1]
dp[i][9] = dp[i-1][8]
for j in range(1,9):
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
answer = 0
for i in range(10):
answer = (answer + dp[N-1][i]) % 1000000000
print(answer)
이렇게 answer값에 더해주고 모듈러 하도록 바꿔주면 끝.
이번 문제는 제목 그대로 쉬웠다!
Author And Source
이 문제에 관하여([백준 10844번] 쉬운 계단 수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sossont/백준-10844번-쉬운-계단-수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)