[BOJ 4796] 캠핑 (Python)

kimdukbae·2021년 4월 7일
0

문제

링크



풀이

예제를 통해 문제를 푼 방법을 설명하려 합니다.

**(Ex1) ** L:5 / P:8 / V:20

강산이는 총 20일짜리 휴가가 있고, 연속하는 8일 중 5일동안만 사용할 수 있다는 의미이다. 이 때 강산이는 최대 14일동안 캠핑장을 사용할 수 있다. 아래 그림을 보자.

20일 휴가를 8일 단위로 나눈다. 그러면 강산이는 16일 휴가중에 확정으로 10일동안 캠핑장을 사용할 수 있게 된다. 강산이의 휴가가 4일이 남게된다. 5일동안 연속으로 캠핑장을 사용할 수 있다는 조건때문에 강산이는 남은 휴가 4일동안 또 캠핑장을 사용할 수 있게 된다. 따라서 14일(10일 + 4일)동안 캠피장을 사용할 수 있다.

이를 식으로 표현하면 {(V / P) * L} + (V % P)이다. 단, (V % P) < L 일 때만 위 식으로 풀 수 있다. 왜냐하면 총 휴가에서 확정으로 사용할 수 있는 날을 뺀 값이 캠핑장 이용할 수 있는 날보다 크면 남은 휴가내내 연속으로 캠핑장을 사용할 수 없기 때문이다. 아래 예제를 통해 설명하겠다.



**(Ex2) ** L:1 / P:4 / V:7

위 식대로 답을 구하면 {(7 / 4) * 1} + (7 % 4) = 4로 최대 4일동안 캠핑장을 사용할 수 있다라는 답이 나온다. 하지만 정답이 아니다! 아래 그림을 보자.

1일동안 확정으로 캠핑장을 사용할 수 있고, 3일의 휴가가 남게된다. 이 때 3일동안 연속으로 캠핑장을 사용할 수 있는 것이 아닌, 1일동안만 연속으로 캠핑장을 사용할 수 있게된다.

이러한 조건들을 생각할 수 있다면 쉽게 풀 수 있다!!



코드

import sys

input = sys.stdin.readline
idx = 1

while True:
    ans = 0
    L, P, V = map(int, input().split())

    if L == 0 and P == 0 and V == 0:
        break
    # min() 을 쓴 이유 -> L:1, P:4, V:7
    ans = ((V // P) * L) + min(V % P, L)

    print("Case %d: %d" % (idx, ans))
    idx += 1
profile
A Student of Computer Science

0개의 댓글