GW LABS

[Backjoon] 쉬운 계단 수 본문

Algorithm & DataStructure

[Backjoon] 쉬운 계단 수

GeonWoo Kim 2020. 11. 11. 08:52

백준 18044번 쉬운 계단 수 문제는 전형적인 백트래킹, 동적계획법 문제였다. 처음 문제를 접했을 때 당황했지만, 천천히 의사코드로 먼저 로직을 구성하고 나서는 어렵지 않게 풀이할 수 있었다. 하향식으로 문제를 풀었지만 상향식 해결법으로 풀이하는 고수들도 많다. 의사코드를 적어놔서 독자 여러분들도 어렵지 않게 로직을 이해할 수 있을 거라고 생각한다.

 

import sys

def find_step_number(length, last_num, container, cache):

    # 컨테이너 길이가 N이라면
    if length == 0:
        return 1

    if cache[length][last_num] != -1:
        return cache[length][last_num]

    # 숫자 0-9까지 반복
    count = 0
    for num in range(0, 10):
        # 컨테이너가 비어있고 숫자가 0이라면
        if len(container) == 0 and num == 0:
            continue

        # 지금 숫자가 컨테이너 이전 숫자와의 차이가 1이라면
        if len(container) == 0 or abs(num - container[-1]) == 1:
            # 숫자 삽입
            container.append(num)
            # 재귀호출
            count += find_step_number(length - 1, num, container, cache)
            # 숫자 빼기
            container.pop()

    cache[length][last_num] = count
    return count

if __name__ == "__main__":
    length = int(sys.stdin.readline())
    cache = [ [-1 for _ in range(10)] for _ in range(length + 1)]
    count = find_step_number(length, 0, [], cache)
    print(count % 1000000000)    

'Algorithm & DataStructure' 카테고리의 다른 글

[Backjoon] 단어 뒤집기 2  (0) 2020.11.26
[Backjoon] 섬의 개수  (0) 2020.11.18
[Backjoon] 정수 삼각형  (0) 2020.11.05
[Backjoon] 스타트와 링크  (0) 2020.10.30
C++로 구현하는 자료구조 (9) - Trie  (0) 2020.10.28
Comments