코테 노트/백준

백준 9095 1, 2, 3 더하기 Python3

화요밍 2021. 8. 4. 21:53
728x90
반응형

https://www.acmicpc.net/problem/9095

 

9095번: 1, 2, 3 더하기

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

www.acmicpc.net

 

최종 코드

 

GitHub - hwayeon351/BEAKJOON-Algorithms: 백준 알고리즘 소스 코드 모음

백준 알고리즘 소스 코드 모음. Contribute to hwayeon351/BEAKJOON-Algorithms development by creating an account on GitHub.

github.com

def solution(n):
    if n <= 2: return n
    elif n == 3: return 4
    dp = [0]*(n+1)
    dp[1] = 1
    dp[2] = 2
    dp[3] = 4
    for i in range(4, n+1):
        dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
    return dp[n]
n = int(input())
answer = [0]*n
for i in range(n):
    answer[i] = solution(int(input()))
for i in range(n):
    print(answer[i])

풀이 과정

풀이 시간 16분

1, 2, 3을 합하여 n을 만드는 경우의 수를 구하는 문제이다.

DP 알고리즘을 적용하기 위해 n이 1~6인 경우까지 경우의 수를 구해나가며 규칙을 찾았다.

n을 만드는 경우의 수는 결국 이전 3개의 값을 만드는 경우의 수를 합하는 것이었다.

dp[n] = dp[i-1] + dp[i-2] + dp[i-3]

dp 리스트를 만들어 메모이제이션을 통해 이전 값을 활용하여 문제를 풀었다.

def solution(n):
    if n <= 2: return n
    elif n == 3: return 4
    dp = [0]*(n+1)
    dp[1] = 1
    dp[2] = 2
    dp[3] = 4
    for i in range(4, n+1):
        dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
    return dp[n]
n = int(input())
answer = [0]*n
for i in range(n):
    answer[i] = solution(int(input()))
for i in range(n):
    print(answer[i])
    
#시간복잡도 = O(n) 공간복잡도 = O(n)
728x90
반응형

'코테 노트 > 백준' 카테고리의 다른 글

백준 16234 인구 이동 C++  (0) 2021.08.05
백준 1890 점프 Python3  (0) 2021.08.05
백준 15686 치킨 배달 C++  (0) 2021.08.04
백준 1463 1로 만들기 Python3  (0) 2021.08.04
백준 15683 감시 C++  (0) 2021.08.03