Algorithm/Baekjoon

[Python] 9095. 1, 2, 3 더하기

느낌표 공장장 2021. 9. 19. 21:17

 

탑다운 방식 (재귀)

tc = int(input())
dp_l = [0, 1, 2, 4] + [0 for _ in range(9)]     # 11까지의 방법을 담을 리스트

# 규칙 : 정수 n을 1, 2, 3으로 나타낼 수 있는 방법 수 = 정수 n-3 , n-2, n-1 을 나타낼 수 있는 방법 수를 다 더한 것
# dp 함수
def dp(n):
    # 리스트에 현재 n을 나타낼 수 있는 방법의 수가 비어 있다면
    if not dp_l[n]:
        # 정수 n-1의 방법의 수가 저장되어 있는지 확인 -> 안되어있다면 또 들어감
        dp(n-1)
        # n-1까지 다 저장되어 있으면 현재 n의 정수를 나타낼 수 있는 방법의 수 저장.
        dp_l[n] = dp_l[n-3] + dp_l[n-2] + dp_l[n-1]


for i in range(tc):
    n = int(input())
    dp(n)
    print(dp_l[n])

 

 

바텀업 방식 (반복문)

# dp 리스트
dp_l = [0 for _ in range(11)]
dp_l[1] = 1
dp_l[2] = 2
dp_l[3] = 4

tc = int(input())
for i in range(tc):
    n = int(input())

    for i in range(4, n+1):
        if dp_l[i]: # 이미 값을 저장했다면 pass
            continue
        dp_l[i] = dp_l[i-1] + dp_l[i-2] + dp_l[i-3]

    print(dp_l[n])

 

 

 

'Algorithm > Baekjoon' 카테고리의 다른 글

[Python] 11659. 구간 합 구하기 4  (0) 2021.09.19
[Python] 1904. 01타일  (0) 2021.09.19
[Python] 2103. 이친수  (0) 2021.09.19
[Python] 11727. 2xn 타일링 2  (0) 2021.09.19
[Python] 9020. 골드바흐의 추측  (0) 2021.09.14