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
예외 처리!! 아직 익숙하진 않지만 자주 활용해보자.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]백준_9625 : BABBA (0) | 2023.11.01 |
---|---|
[Python]백준_18238 : ZOAC 2 (1) | 2023.11.01 |
[Python]백준_2810 : 컵홀더 (0) | 2023.10.31 |
[Python]백준_10825 : 국영수 (0) | 2023.10.31 |
[Python]백준_5622 : 다이얼 (2) | 2023.10.30 |