Recent Posts
Recent Comments
라떼는말이야
[solved.ac 실버3] 9095_1, 2, 3 더하기 (DP 풀이) 본문
반응형
문제
정수 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의 합으로 나타내는 방법의 수를 출력한다.
나의 풀이
DP로 풀이했다. 패턴을 찾아보자.
- 0을 만드는 방법: 1, 2, 3을 0개 더한다.
- 1을 만드는 방법: 1
- 2를 만드는 방법: 1+1 / 2
- 3을 만드는 방법: 1+1+1 / 1+2 / 2+1/ 3
- 4를 만드는 방법: 1+1+1+1 / 1+1+2 / 1+2+1 / 2+1+1 / 2+2 / 1+3 / 3+1
- ...
- i를 만드는 방법: i-1를 만드는 방법에 1 더하기 / i-2를 만드는 방법에 2 더하기 / i-3을 만드는 방법에 3 더하기
- ...
위 처럼 찾아보았다.
3부터는 i를 만드는 방법의 패턴이 가능하다.
3을 만드는 방법은 2를 만드는 방법에 1 더하기 / 1을 만드는 방법에 2 더하기 / 0을 만드는 방법에 3 더하기 이다.
4를 만드는 방법은 3을 만드는 방법에 1 더하기 / 2를 만드는 방법에 2 더하기 / 1을 만드는 방법에 3 더하기 이다.
...
0을 만드는 방법은 한 가지 이다. (아무 것도 더하지 않는 경우)
1을 만드는 방법도 한 가지 이다. (1을 하나 더하는 경우)
2를 만드는 방법은 두 가지 이다. (1+1 , 2)
위 사실을 바탕으로 코드를 짜면 다음과 같다.
t = int(input())
d = [0] * 11
d[0], d[1], d[2] = 1, 1, 2
for i in range(3, 11):
d[i] = d[i-1] + d[i-2] + d[i-3]
for _ in range(t):
print(d[int(input())])
반응형
'알고리즘 > 코딩 테스트' 카테고리의 다른 글
[solved.ac 실버 1] 11286_절대값 힙 (2) | 2021.09.21 |
---|---|
[solved.ac 실버2] 11047_동전0 (그리디 풀이) (0) | 2021.09.21 |
[solved.ac 실버2] 5525_IOIOI (0) | 2021.09.21 |
[solved.ac 실버1] 1074_Z (0) | 2021.09.21 |
[solved.ac 실버3] 9461_파도반 수열 (DP 풀이) (0) | 2021.09.20 |
[solved.ac 실버3] 9375_패션왕 신해빈 (0) | 2021.09.20 |
[solved.ac 실버1] 11279_최대 힙 (0) | 2021.09.20 |
[solved.ac 실버1] 1927_최소 힙 (0) | 2021.09.20 |
Comments