백준 온라인 저지, 다이나믹프로그래밍 / 9095번: 123더하기 (파이썬 / 백준 골드문제)
2021. 11. 9. 00:35ㆍ알고리즘/다이나믹프로그래밍
728x90
반응형
문제
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 2+2
- 1+3
- 3+1
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
출력
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
예제 입력 1
3 4 7 10
예제 출력 1
7 44 274
접근 방법
- n이 4이상일 때, 다음과 같이 식을 추론할 수 있다. an = (1 + an-1) + (2 + an-2) + (3 + an-3)
- n이 4이상일 때, n을 1, 2, 3의 합으로 나타내는 방법은 다음과 같이 표현할 수 있다. An = A(n-1) + A(n-2) + A(n-3)
- 위의 일반항을 토대로 다이나믹 프로그래밍을 진행한다.
코드
# https://www.acmicpc.net/problem/9095 # 접근 방법 # n이 4이상일 때, 다음과 같이 식을 추론할 수 있다. an = (1 + an-1) + (2 + an-2) + (3 + an-3) # n이 4이상일 때, n을 1, 2, 3의 합으로 나타내는 방법은 다음과 같이 표현할 수 있다. An = A(n-1) + A(n-2) + A(n-3) # 위의 일반항을 토대로 다이나믹 프로그래밍을 진행한다. def find_count(n): if d[n]: return d[n] d[n] = find_count(n-1) + find_count(n-2) + find_count(n-3) return d[n] d = [0 for _ in range(11)] d[1] = 1 d[2] = 2 d[3] = 4 tc = int(input()) for _ in range(tc): n = int(input()) print(find_count(n))
728x90
반응형
'알고리즘 > 다이나믹프로그래밍' 카테고리의 다른 글
백준 온라인 저지, 다이나믹프로그래밍 / 1516번: 게임개발 (파이썬 / 백준 골드문제) (0) | 2021.11.11 |
---|---|
백준 온라인 저지, 다이나믹프로그래밍 / 14002번: 가장긴증가하는부분수열4 (파이썬 / 백준 골드문제) (0) | 2021.11.09 |
백준 온라인 저지, 다이나믹프로그래밍 / 17619번: 개구리점프 (파이썬 / 백준 골드문제) (0) | 2021.09.09 |
백준 온라인 저지, 다이나믹프로그래밍 / 13549번: 숨바꼭질 (파이썬 / 백준 골드문제) (0) | 2021.09.07 |
백준 온라인 저지, 다이나믹프로그래밍 / 14226번: 이모티콘 (파이썬 / 백준 골드문제) (0) | 2021.09.07 |