haju__log
[python][백준/BOJ] 4796번 : 캠핑 본문
반응형
https://www.acmicpc.net/problem/4796
✅ 문제풀이
- 아래 그림을 보면서 문제를 해석해보자.
- 예제 1에서는 연속 8일 중 5일을 선택해야하는데, 총 20일이므로,
- 8일 / 8일 / 나머지 4일로 쪼개서 볼 수 있다.
- 그러면 두 번의 8일에서는 두 번 다 5일을 사용할 수 있고,
- 마지막 4일에서는 5일보다 작으므로 4일 모두 사용할 수 있다.
- 예제 2에서는 총 17일이므로, 8일 / 8일 / 나머지 1일로 쪼개서 볼 수 있다.
- 위와 마찬가지로 두 번의 8일에서는 5일씩 사용할 수 있고, 나머지 1일을 사용할 수 있다.
✅ 첫 번째 시도
import sys
check=1
while True:
l,p,v=map(int,sys.stdin.readline().split())
if l==p==v==0:
break
print("Case %d: %d" %(check,v//p*l+v%p))
check+=1
❗ 틀린 이유 :
반례 >
- input > 5 15 40
- answer > 15
- output > 20
- 온전한 p일 중에서 l일을 선택하는 식은 v//p가 맞음
- 그러나 가능한 나머지 일수를 세는 방식이 틀렸다.
- 나머지 가능한 날짜 수가 9이고, 선택가능한 l일이 5라면 최대 5일까지만 가능한 것인데, 내가 작성한 코드는 9일을 모두 세는 방법이었기에 틀린 코드였던 것이다...!
✅ 최종코드
- 가능한 나머지 일수를 세는 방식을 조건문을 두어
- 나머지 값이 만약 l일보다 크다면 l일까지만 세고
- 나머지 값이 l일보다 작거나 같다면 나머지 값을 그대로 저장한다.
import sys
check=1
while True:
l,p,v=map(int,sys.stdin.readline().split())
if l==p==v==0:
break
result=v//p*l
if v%p>l:
result+=l
else:
result+=v%p
print("Case %d: %d" %(check,result))
check+=1
반응형
'BOJ_백준 > 그리디' 카테고리의 다른 글
[python][백준/BOJ] 2839번 : 설탕 배달 (2) | 2023.09.07 |
---|---|
[python][백준/BOJ] 11399번 : ATM (0) | 2023.09.06 |