본문 바로가기
Problem Solving/BOJ

[BOJ][Python]19947번 풀이

by NoiB 2022. 6. 13.
반응형

https://www.acmicpc.net/problem/19947

 

19947번: 투자의 귀재 배주형

2020년에 학교로 복학한 주형이는 월세를 마련하기 위해서 군 적금을 깨고 복리 투자를 하려고 한다. 주형이가 하려는 투자에는 3가지 방법의 투자 방식이 있다.  1년마다 5%의 이율을 얻는 투자 (

www.acmicpc.net

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