코드
i = 1
while True:
l, p, v = map(int, input().split())
if p==0 and l==0 and v==0: # 0, 0, 0이 입력되면 반복문 종료
break
camping = (l * (v // p)) + min((v % p), l) # 캠핑장을 사용할 수 있는 최대 일수
print('Case {}:'.format(i), camping)
i += 1
쉬운 문제인 줄 알고 달려들었다가 '틀렸습니다!'를 계속 만나게 되었다.
그 이유는 camping을 구하는 식에 있다.
먼저, l=5, p=8, v=17인 경우를 살펴보면 다음과 같다.
캠핑장에서 최대 머무를 수 있는 일 수는 camping = l * (v // p) + (v % p)로 구할 수 있다.
하지만, l=3, p=8, v=20인 경우에는 위 camping 식으로 구할 수 없다.
이 경우를 위에서 구한 camping 식으로 구하면 10일이 나오기 때문에 오답이다.
16일 이후를 살펴보면, 남은 휴가는 4일이다.
하지만, 캠핑장은 연속으로 3일(=L)만 이용 가능하므로 3일만 머물러야 한다.
그러므로 캠핑장에 머무를 수 있는 최대 일 수는 9일이 된다.
camping = l * (v // p) + (v % p) 식에서 (v % p) 부분만 수정하면 모든 경우에 적용시킬 수 있다.
2번째 경우는 v % p보다 l이 작으므로, 이럴 때는 v % p가 아닌 l를 선택하면 되는 것이다.
반대로, l보다 v % p가 작으면, v % p를 선택해 계산해 주면 된다.
camping = (l * (v // p)) + min((v % p), l) # 캠핑장을 사용할 수 있는 최대 일수
두 값 중 작은 값을 선택할 수 있도록 min 함수를 사용하면 된다.
반응형