[BaekJoon] 1673 : 치킨 쿠폰

🔒 문제

강민이는 치킨 한 마리를 주문할 수 있는 치킨 쿠폰을 n장 가지고 있다. 이 치킨집에서는 치킨을 한 마리 주문할 때마다 도장을 하나씩 찍어 주는데, 도장을 k개 모으면 치킨 쿠폰 한 장으로 교환할 수 있다.

강민이가 지금 갖고 있는 치킨 쿠폰으로 치킨을 최대 몇 마리나 먹을 수 있는지 구하여라. 단, 치킨을 주문하기 위해서는 반드시 치킨 쿠폰을 갖고 있어야 한다.

🛫 입력

여러 줄에 걸쳐서 자연수 n과 k가 주어진다.

🛬 출력

각 입력마다 한 줄에 정답을 출력한다.

🗿 제한

  • 1 < k ≤ n ≤ 1,000,000,000

🔑 풀이

🙅‍ 첫 번째 풀이 : 런타임 에러
무언가 많이 잘못된 코드..

while True :
    n, k = map(int, input().split())
    try :
        if (n > 0 and k > 0) : # 1 < k <= n
            d = n//k
            result = n + d
            while (d >= k) :
                d //= k
                result += d
            print(result)
    except :
        break

🙅‍ 두 번째 풀이 : 틀렸습니다!
반복문으로 여러 줄 입력을 받는 상황을 위해 sys.stdin.readline()을 사용했다.
try-except 문을 이용해 입력값이 없는 경우 프로그램이 종료되도록 했다.
근데 왜 틀린걸까..

import sys

while 1 :
    try : 
        n, k = map(int,sys.stdin.readline().split()) # 반복 입력 받을 때
        if (k > 1 and n >= k) :
            d = n//k
            result = n + d
            while (d >= k) :
                d //= k
                result += d
            print(result)
    except ValueError :
        break

📌 Pinned

반복문으로 여러줄 입력받는 상황에서는 반드시 sys.stdin.readline()을 사용해야 시간 초과가 발생하지 않는다.

좋은 웹페이지 즐겨찾기