[Python] 백준 / silver / 4796 : 캠핑

김상우·2021년 11월 17일
0

문제 링크 : https://www.acmicpc.net/problem/4796

문제 아이디어는 그리디로 생각하면 어렵지 않았다. 그런데 왠지모를 오답이 자꾸 나서 고민을 많이 했는데, 좋은걸 얻어가는 것 같다. 앞으로 % 연산을 사용할 때는 항상 나머지 처리에 대해서 고려해봐야 겠다.


오답 코드

import sys

i = 1
while True:
    L, P, V = map(int, sys.stdin.readline().split())

    if L == 0 and P == 0 and V == 0:
        break

    answer = "Case "+str(i)+": "+str( (V//P)*L + (V%P) )
    print(answer)
    i += 1

맞았다고 생각했지만, V % P 가 L 보다 큰 경우 반례가 생겼다. 극단적으로 L = 1, P= 1000 이고 V % P 는 999 인 경우 나머지에서 1만 추가해야하는데 999를 추가하게 된다.


정답 코드

import sys

i = 1
while True:
    L, P, V = map(int, sys.stdin.readline().split())

    if L == P == 0 == V:
        break

    if (V%P) < L:
        answer = "Case "+str(i)+": "+str( (V//P)*L + (V%P) )
        print(answer)
    else:
        answer = "Case "+str(i)+": "+str( (V//P)*L + L )
        print(answer)

    i += 1
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.

0개의 댓글