-
[백준] 1562 - 계단 수Algorithm 문제 2019. 6. 30. 20:22
https://www.acmicpc.net/problem/1562
간단한 dynamic programming 문제이다.
dp에 이용되는 숫자의 특징은 2가지다.
- 수의 마지막에 위치하는 숫자
- 현재까지 사용된 숫자
현재까지 사용된 숫자의 경우, bitmask를 사용하여 10진수로 변환한다.
ex) 2, 4, 5 를 가짐 -> 0000110100(2) -> 52
위 두가지 특징을 가진 계단 수의 개수를 2차원 배열에 저장한다.
n-1 길이의 계단 수들로부터 n 길이의 계단 수의 계단 수의 개수를 구한다.
배열을 전부 순회하며 해당 수의 가장 뒷자리에 올 수 있는 수를 추가한 뒤, 이를 n 길이의 2차원 배열에 추가한다.
<Python 코드>
12345678910111213141516171819n = int(input())re = 0dp = [[0 for _ in range(1024)] for _ in range(10)]for i in range(1, 10):dp[i][1<<i] = 1for i in range(1, n):dp_next = [[0 for _ in range(1024)] for _ in range(10)]for e in range(10):for bm in range(1024):if e < 9:dp_next[e][bm | (1<<e)] = (dp_next[e][bm | (1<<e)] + dp[e+1][bm]) % 1000000000if e > 0:dp_next[e][bm | (1<<e)] = (dp_next[e][bm | (1<<e)] + dp[e-1][bm]) % 1000000000dp = dp_nextprint(sum([dp[i][1023] for i in range(10)]) % 1000000000)cs 'Algorithm 문제' 카테고리의 다른 글
[백준] 1064 - 평행사변형 (0) 2019.07.03 [백준] 15954 - 인형들 (1) 2019.07.02 [백준] 3190 - 뱀 (0) 2019.06.30 [백준] 17140 - 이차원 배열과 연산 (0) 2019.06.29 [백준] 1238 - 파티 (0) 2019.06.28