츄르사려고 코딩하는 코집사입니다.
1, 2, 3 더하기 출처다국어분류
한국어
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초 | 128 MB | 51923 | 33098 | 21963 | 61.730% |
문제
정수 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
1. 제출코드
T = int(input())
def sol(n) :
if n == 1 :
return 1
elif n == 2 :
return 2
elif n == 3 :
return 4
else :
return sol(n-1) + sol(n-2) + sol(n-3)
for i in range(T) :
n = int(input())
print(sol(n))
2. 문제풀이
이 문제는 DP(Dynamic Programming) 문제이다.
이 문제를 풀 때 DP 접근을 위해 패턴이나 규칙을 찾기 위해 경우의 수를 풀어서 썼다.
1 -> (1) -> 1개
2 -> (1+1), (2) -> 2개
3 -> (1+1+1), (1+2), (2+1), (3) -> 4개
4 -> (1+1+1+1), (1+1+2), (1+2+1), (1+3), (2+1+1), (2+2), (3+1) -> 7개
5 -> (1+1+1+1+1), (1+1+1+2), (1+1+2+1), (1+1+3), (1+2+1+1), (2+1+1+1), (1+2+2), (2+1+2), (2+2+1), (1+3+1), (3+1+1), (2+3), (3+2) -> 13개
위의 규칙을 봤을 때, 4번째 경우의 수는 첫 번째와 두 번째, 세 번째 경우의 수를 합한 것과 같다는 것.
5번째 경우의 수는 2, 3, 4번째 경우의 수의 합과 같다는 것을 볼 수 있다.
따라서, 위의 규칙을 보면 하나의 점화식이 나온다.
n이 3보다 클 때(n>3), f(n) = f(n-1) + f(n-2) + f(n-3)
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 백준 2309번 일곱 난쟁이 자바(Java) (0) | 2021.02.05 |
---|---|
[백준 알고리즘] 백준 2164번 카드2 자바(Java) (0) | 2021.02.04 |
백준 17478번 재귀함수가 뭔가요? 자바(Java) (0) | 2021.02.01 |
백준 2839번 설탕배달 자바(Java) (4) | 2021.01.25 |
백준 10815번 숫자 카드 파이썬(Python) - set 이용 (1) | 2020.08.14 |
백준 19532번 수학은 비대면강의입니다 파이썬(Python) (0) | 2020.08.10 |
백준 1912번 연속합 파이썬(Python) (0) | 2020.06.30 |
백준 1152번 단어의 개수 파이썬(Python) (0) | 2020.06.14 |
최근댓글