CodingTest/Baekjoon

[baekjoon] 백준 4796번(파이썬): 캠핑

JunJangE 2021. 5. 20. 16:52

문제

 

4796번: 캠핑

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

www.acmicpc.net

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

- 캠핑장을 연속하느 P일 중, L일 동안만 사용할 수 있다.

- 강산이가 V일짜리 휴가를 시작했을 때, 캠핑장을 최대 며칠 동안 사용할 수 있는지를 구하는 문제이다.

- 다음 조건을 만족한다. (1 < L < P < V)

- 입력은 여러 개의 테스트 케이스로 이루어져 있고 L, P, V를 순서대로 포함하고 있다.

- 마지막 줄에는 0이 3개가 주어진다.

알고리즘

- 입력은 여러 개 의 케이스로 이루어져있기 때문에 while문을 통해 여러 번 반복한다.

- 이때, 입력에서 0이 3개일 경우에는 반복문을 멈쳐준다.

- V일짜리 휴가를 캠핑장이 연속하는 P일로 나누어 캠핑장을 몇 번 갈 수 있는지 확인한다.

- 나머지가 L일보다 작으면 나머지만큼 또 캠핑장을 갈 수 있고 나머지가 크면 L일만큼 또 갈 수 있다.

코드

import sys
# 첫번째 Case
cnt = 1

while True:

    l, p, v = map(int, sys.stdin.readline().split())

    # 마지막 줄에 0이 3개 주어지기 때문에 while문을 멈춰준다.
    if l == p == v == 0:
        break

    # divmod는 첫번째 인자를 두번째 인자로 나눈 몫과 나머지를 tuple 형식으로 반환한 것이다.
    # 따라서 a 는 몫, b 는 나머지
    a, b = divmod(v, p)
    print(a,b)
    # V일짜리 휴가를 캠핑장이 연속하는 P일로 나누게되면 캠핑장을 몇번 갈 수 있는지 나온다.(몫)
    # 나머지가 L일보다 작으면 나머지만큼 또 캠핑장을 갈 수 있고 나머지가 크면 L일만큼 또 갈 수 있다.
    if b <= l:

        print("Case {}: {}".format(cnt, a * l + b))

    else:

        print("Case {}: {}".format(cnt, a * l + l))

    #Case 횟수 카운트
    cnt += 1

github

 

junjange/CodingTest

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com