개발 노트/알고리즘 문제
백준 10844 쉬운 계단 수
LeeInGyu
2025. 4. 9. 23:08
백준 10844 쉬운 계단 수
링크: 10844 쉬운 계단 수
접근 방법
- (시간 초과) dfs로 반복해서 해당 길이에 도달했을 때 반복 종료
- (성공) dp로 각 단계에서 생성될 수 있는 개수를 세기
소스 코드 1 (시간 초과)
소스 코드: 92876897 제출
from collections import deque
N = int(input()) # 입력
count = 0
queue = deque([i for i in range(1, 10)])
while len(queue) > 0:
number = queue.pop()
if number // 10**(N-1) > 0:
count += 1
continue
last_number = number % 10
if last_number - 1 >= 0:
new_number = number * 10 + (last_number - 1)
queue.append(new_number)
if last_number + 1 < 10:
new_number = number * 10 + (last_number + 1)
queue.append(new_number)
print(count)
- O(2^N)의 시간이 소비되어 완전 탐색 방법은 N=100 이상일 경우 시간 초과가 발생한다는 것을 알았다.
소스 코드 2
소스 코드: 92879617 제출
# 입력
N = int(input())
# 초기값 설정(1~9의 경우의 수는 1가지, 0은 0가지)
dp = [[0 for _ in range(10)] for _ in range(N)]
for idx in range(1, 10):
dp[0][idx] = 1
# 반복으로 dp 리스트 작성
for n in range(1, N):
dp[n][0] = dp[n-1][1] % 1000000000
for num in range(1, 9):
dp[n][num] = (dp[n-1][num-1] + dp[n-1][num+1]) % 1000000000
dp[n][9] = dp[n-1][8] % 1000000000
# 최종합계 출력
print(sum(dp[N-1]) % 1000000000)
- dp로 변경해서 해결
결론
- 완전 탐색이 N=100 이상이면 시간 초과가 발생한다는 것과 시간 1초 이상 소요된다는 것을 이해하고 다른 방법을 사용할 수 있도록 빠르게 생각하는 방법을 공부해야될 것 같다.
728x90
반응형