https://www.acmicpc.net/problem/15989
n = int(input())
arr = [0, 1, 2, 3, 4, 5, 7, 8, 10, 12, 14, 16]
for i in range(12, 100001):
# arr.append()
# a = arr[i]
arr.append(arr[i-6] + i)
for i in range(n):
num = int(input())
print(arr[num])
이 문제는 DP를 이용한 문제이다.
1부터 20까지 쭉 나열해보니 6보다 큰 경우, arr[i-6] + number가 성립되었다.
생각해보면 이토록 단순한 문제였는데 너무 어려운 문제들에게 둘러싸여 있어서 오히려 무척이나 해맸다.
어떻게 20까지 구했나보면 직접 dfs를 구현해서 20까지 출력을 해보았다.
# dfs 구현으로 20까지 출력
from copy import deepcopy
n = int(input())
cnt = 0
def dfs(target, num, history, arr):
if target == num:
history.sort()
if history in arr:
return
else:
global cnt
arr.append(history)
cnt += 1
return
if target < num:
return
for i in range(3):
a = deepcopy(history)
a.append(i+1)
dfs(target, num+i+1, a, arr)
# dfs(target)
i = 1
while i <= 40:
arr = []
cnt = 0
arr = []
dfs(i, 1, [1], arr)
dfs(i, 2, [2], arr)
dfs(i, 3, [3], arr)
print(i, ' = ', cnt)
i += 1