코딩테스트 & 문제 풀이

[Python]백준_4998 : 저금

Hicecream 2023. 10. 31. 00:36

2022년 11월 23일에 작성됨

 

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

 

4998번: 저금

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트는 한 줄로 이루어져 있고, N, B, M이 주어진다. M은 항상 N보다 크다. N과 M은 항상 백만보다 작거나 같은 수이고, 음수 또는 0이 아니다

www.acmicpc.net

 

 

문제 분석

맨 처음 N원을 저금하고, 1년마다 통장에 있는 돈의 %B만큼의 이자를 N원에다가 더해준다. 그 값이 M원을 넘는지 판단해주는 과정을 반복한다.

 

 

소스 코드-1 (❌)

n, b, m = map(float, input().split())
cnt = 0

while (n < m):
    n += n*(b/100)
    cnt += 1

print(cnt)

예제 입출력은 맞게 나오는데 백준에 제출하니까 틀렸다고 뜬다

 

 

소스 코드-2 (⭕)

import sys
try:
    while(1):
        n, b, m = map(float, input().split())
        cnt = 0
        while (n < m):
            n += n*(b/100)
            cnt += 1

        print(cnt)
        
except:
    exit()

예제 입력을 잘 보면 각각의 테스트 케이스가 아닌 한번에 입력을 받는 것이다!

따라서 try except와 무한 반복문으로 계속 입력을 받고, 입력 값이 없으면 예외 처리를 해준다.

 

 

코드 분석

n(저금한 돈), b(b% 만큼의 이자), m(총 금액이 m원을 넘는지)

1. n, b, m의 값을 실수형으로 입력 받는다.

2. 몇 년이 걸리는지 세어줄 cnt 변수를 0으로 초기화 해주고

3. n이 m보다 작은 경우, 원래 있던 돈 n원에 이자 n*(b/100)원을 더한 값이 다시 n원이 되고, cnt에 1을 더해준다.

4. 그러다 n이 m보다 커지는 순간 반복문을 빠져나오고 그때의 cnt 값을 출력해준다.

5. try except를 써서 위 과정을 무한 반복문으로 계속 반복하는데 입력 값이 없는 경우는 예외 처리를 해준다.

6. sys 모듈을 사용하여 프로그램을 강제 종료하는 exit()을 써준다.

 

 

 

end

예외 처리!! 아직 익숙하진 않지만 자주 활용해보자.