안경잡이 구루루

백준 4796 (캠핑) [Python/파이썬] [Greedy/그리디] 본문

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 4796 (캠핑) [Python/파이썬] [Greedy/그리디]

구루루(gururu) 2023. 9. 17. 15:13
반응형

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

 

4796번: 캠핑

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

www.acmicpc.net

 


나:

i=0
while True:
    L, P, V = map(int,input().split())
    if L ==0 and P ==0 and V ==0:
        break
    else:
        i +=1
        a = L*(V//P)
        b = V%P
        a += min(b,L)
    print("Case {}: {}".format(i,a))

완성된 코드는 위와 같다,

총 반복 횟수를 의미하는 변수 i 를 선언한다.

입력값 L, P, V 가 모두 0이 나오면 종료하기 때문에 그전까지  반복하기 위해 while 무한 반복문을 사용하였다.

모두 0이 아닌 경우 반복횟수 i 가 하나 늘어나고

문제에서 구해야할 것은 캠핑장을 최대 며칠동안 사용할 수 있을지로 우선 남은기간 제외 사용할 수 있는 날인 L*(V // P) 값을  a 변수에 넣었다.

이후 남은 날짜 b =V % P 가 (1) 만약 사용 가능한 날짜 L 보다 크다면 최대 이용가능 날짜인 L을 추가로 이용하고  (2) 만약 그 반대로 나머지인 b가 L 보다 작다면 그 작은 날짜를 그대로 사용가능하기 때문에 나머지인 b 를 추가로 이용한다. 이를 min() 함수로 쉽게 구현함에 주목하자

최종적으로 반복횟수 i 와 최종사용 가능한 최대일자인 a를 format 함수를 이용해 출력해준다.

 

반응형