알고리즘/BOJ

[Python] 4796 : 캠핑

jae00 2022. 7. 13. 18:54

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

 

4796번: 캠핑

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.

www.acmicpc.net

문제

등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다.

캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다.

강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까?

강산이는 조금 더 일반화해서 문제를 풀려고 한다. 

캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V)

 

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.

 

출력

각 테스트 케이스에 대해서, 강산이가 캠핑장을 최대 며칠동안 사용할 수 있는지 예제 출력처럼 출력한다.

 

풀이

문제를 보자마자 단순한 반복문을 사용하는 것이 아니라 규칙이 있는 것을 파악했다.온전히 캠핑장을 사용할 수 있는 기간을 휴가일에서 나누어 주면 온전히 사용할 수 있는 횟수가 나온다. 이를 사용 가능한 기간과 곱해주고 온전히 사용하지 못하고 남는 일수를 더해준다고 생각했다.하지만 여기서 한가지, 온전히 사용하지 못하고 남는 일수에 대해서 예를 들어 8일 중 5일을 사용할 수 있을때 6일이 남았다면 6일이 아닌 5일을 사용한다는 것을 생각하지 못했다! (좀 더 조건에 유의해야겠다)

 

import sys
input = sys.stdin.readline

cnt = 1
while True:
    a, b, c = map(int, input().split())
    if a == 0 and b == 0 and c == 0:
        break

    ans = (c // b) * a
    ans += min(c % b, a)

    print("Case %d: %d" %(cnt, ans))
    cnt += 1

'알고리즘 > BOJ' 카테고리의 다른 글

[Python] 1715번 : 카드 정렬하기  (0) 2022.07.11
[Python] 15686번 : 치킨 배달  (0) 2022.07.10
[Python] 1931번 : 회의실 배정  (0) 2022.06.09
[DFS/BFS]2178 미로 탐색  (0) 2022.01.09