문제
정수 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의 합으로 나타내는 방법의 수를 출력한다.
<코드>
def solve_cases(cases):
# DP 배열 초기화
dp = [0] * 12
dp[0] = 1
dp[1] = 1
dp[2] = 2
dp[3] = 4
# DP 배열 채우기
for i in range(4, 12):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
# 결과 저장
results = []
for n in cases:
results.append(dp[n])
return results
import sys
input = sys.stdin.read
data = input().split()
T = int(data[0])
cases = list(map(int, data[1:]))
results = solve_cases(cases)
for result in results:
print(result)
<풀이과정>
- DP 배열 정의:
- dp[i]는 정수 ii를 1, 2, 3의 합으로 나타내는 방법의 수
- 기저 사례 초기화:
- dp[0]=1: 0을 만드는 방법은 하나도 없으므로 0.
- dp[1]=1: 1을 만드는 방법은 1 하나뿐.
- dp[2]=2: 2를 만드는 방법은 1+1, 2 두 가지.
- dp[3]=4: 3을 만드는 방법은 1+1+1, 1+2, 2+1, 3 네 가지.
- 점화식:
- dp[n]=dp[n−1]+dp[n−2]+dp[n−3]
- 을 1, 2, 3의 합으로 나타내기 위해 마지막에 더해지는 숫자를 고려
- 만약 n을 만들 때 마지막에 더한 숫자가 1이라면, 그 이전에 만들어진 수는 n−1
- 만약 마지막에 더한 숫자가 2라면, 그 이전에 만들어진 수는 n−2
- 만약 마지막에 더한 숫자가 3이라면, 그 이전에 만들어진 수는 n−3
'2024 코딩테스트 스터디' 카테고리의 다른 글
[9주_2일차] 프로그래머스-디스크 컨트롤러(Python) (0) | 2024.07.31 |
---|---|
[9주_1일차] 프로그래머스-더 맵게(Python) (0) | 2024.07.30 |
[8주_6일차] 백준-1748 수 이어 쓰기 1(Python) (0) | 2024.07.28 |
[8주_5일차] 백준-6064 카잉 달력(Python) (0) | 2024.07.27 |
[8주_4일차] 프로그래머스-행렬의 덧셈(Python) (0) | 2024.07.26 |