반응형
https://www.acmicpc.net/problem/19947
import math
def sol(i):
if i==11:
return
if i<3:
t[i] = max(math.floor(t[i-1]*1.05),t[i])
sol(i+1)
elif i>=3 and i<5:
t[i] = max(math.floor(t[i-1]*1.05),math.floor(t[i-3]*1.2),t[i])
sol(i+1)
else:
t[i] = max(math.floor(t[i-1]*1.05),math.floor(t[i-3]*1.2),math.floor(t[i-5]*1.35),t[i])
sol(i+1)
h,y = map(int, input().split())
t = [0 for _ in range(11)]
t[0]=h
sol(1)
print(t[y])
이번 문제도 어려운 문제는 아니지만 실수할 수도 있는 문제라고 생각합니다. 저는 처음에 한 번 선택한 금리를 쭉 가져가야한다고 잘못보는 바람에 그냥 반복문으로 풀어서 틀렸었는데요. 선택한 상품의 약정이 진행중일 때만 금리의 변경이 불가능하고 해당 약정이 끝난다면 금리의 변경이 가능합니다. 즉 모든 i에 대해서 1년,3년,5년 이후에 무엇이 가장 이득일지를 계속 체크를 해야한다는 뜻이죠.
재귀 함수는 제 코드와 달라도 상관없습니다. 저도 다르게 짜고 있다가 이렇게 바꾸느라 코드에 불필요한 부분이 남아있는데요(모든 구간에 t[i]가 max()안에 들어가 있는 점, 처음엔 1년 단위 금리를 다 계산하고 3년,5년을 순서대로 계산해서 t[i]와 비교하려던 흔적입니다). 매번 i에 대해서만 조건에 맞는 최댓값을 구하면 반복횟수를 10회에서 끊을 수 있기 때문에 이렇게 작성했습니다.
재귀를 사용하지 않고 반복문을 이용하더라도 반복문 안에 조건문을 위처럼 작성하시면 문제없이 돌아갈 것 같습니다.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ][Python]11279번 풀이 (0) | 2022.06.14 |
---|---|
[BOJ][Python]9372번 풀이 (0) | 2022.06.13 |
[BOJ][Python]2740번 풀이 (0) | 2022.06.13 |
[BOJ][Python]2630번 풀이 (0) | 2022.06.13 |