[Python]백준_4998 : 저금

Alal11·2022년 11월 23일
0
post-thumbnail

출처

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


문제

상근이는 은행에 가서 통장을 만들고 N원을 저금했다. 상근이는 이 통장에 입금이나 출금을 하지 않았다.

은행은 통장을 만든지 1년이 지날때마다 상근이의 통장에 저금되어 있는 돈의 B%만큼을 이자로 적립해준다.

상근이는 몇 년이 지나면 통장에 저금되어 있는 돈이 M원을 넘을지 궁금해졌다.

N,M,B가 주어졌을 때, 몇 년이 지나야 하는지 구하는 프로그램을 작성하시오.


입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트는 한 줄로 이루어져 있고, N, B, M이 주어진다. M은 항상 N보다 크다. N과 M은 항상 백만보다 작거나 같은 수이고, 음수 또는 0이 아니다. B는 50보다 작거나 같으며, 양수이다. 모든 수는 소수점 둘째자리까지 주어진다.


출력

각 테스트 케이스에 대해서, M원을 넘게 만들려면 몇 년이 걸리는지 출력한다.


예제 입출력


알고리즘 분류

  • 수학
  • 구현
  • 시뮬레이션

➡️문제 분석

맨 처음 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

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

0개의 댓글