Algorithm/백준

[백준 알고리즘] 4796번: 캠핑 (Python)

에릭 Kim 2023. 4. 19. 09:33
반응형

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개 주어진다.

 

출력

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

 

 

소스코드

 

 

 

풀이

★ while True 구문으로 무한 반복문을 돌면서, l,p,v의 값이 모두 0이 들어왔을 때 반복문 종료

 

★ a와 b라는 변수 설정. a는 v를 p로 나눈 몫, b는 v를 p로 나눈 나머지. 

 

★ 최대 캠핑장 사용일수를 구할 때 다음과 같이 ans = a* l + b를 해주면 오답이 뜨게 됩니다.

 

예를 들어 l,p,v,에 5,8,20이 들어온 경우에 a  = 2, b = 4가 되고 정답인 ans는 2 * 5 + 4 => 14로 맞출 수 있습니다. 

 

하지만 l,p,v에 3,8,20이 들어온 경우에는 b에 대한 조건절이 없으면 정답은 9인데도 10이 출력되게 됩니다. 

 

그 이유는 b가 l 보다 큰 상황이 존재할 수 있기에 그에 대한 조건절을 처리해줘야 합니다. b는 휴가 일수를 가능한 시간동안 사용하고 남은 날짜입니다. 남은 날짜가 연속하는 p일 중, l일 보다 크게 된다면 남은 일자가 l일을 넘을 수 없기 때문에 

b를 l로 바꿔줘야 합니다.

 

그렇기에 if b > 1일 때, b = l 코드를 작성하여 그러한 부분을 조건문 처리 해줍니다. 

 

반응형