문제 설명
•
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 문제
예제 입력/출력
•
입력1
3
4
7
10
Plain Text
복사
•
출력1
7
44
274
Plain Text
복사
제약 조건
•
문제 풀이
•
접근 1 브루트 포스 (완전 탐색) -
◦
을 만들기 위해 1, 2, 3을 계속 더하는 모든 방법을 시도하는 방식
◦
재귀적으로 모든 경우를 탐색하므로, 트리의 깊이가 이고, 각 노드에서 3개의 분기를 탐색하므로 시간 복잡도는
▪
즉, 이면 최악의 경우 약 번 연산이 필요
◦
이 문제에서 이므로 엄청난 연산량이 필요하지는 않지만, 더 효율적인 풀이를 떠올릴 필요가 있다.
•
접근 2 DP -
◦
DP를 사용하면 중복 계산을 피하고 으로 문제를 해결할 수 있다.
◦
DP 테이블 정의
▪
정수 n을 1, 2, 3의 합으로 나타내는 방법의 수
◦
DP 관계식
▪
◦
초기값 처리
▪
점화식을 적용하려면 최소한 의 값이 있어야 한다.
▪
▪
▪
풀이 코드
접근 1 브루트 포스 (완전 탐색) -
•
접근 2 DP -
def count_ways(n):
if n == 1:
return 1
elif n == 2:
return 2
elif n == 3:
return 4
# DP 테이블 생성
dp = [0] * (n + 1)
dp[1], dp[2], dp[3] = 1, 2, 4 # 초기값
# 점화식 적용
for i in range(4, n + 1):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
return dp[n]
T = int(input())
for _ in range(T):
n = int(input())
print(count_ways(n))
Python
복사