⌨️ Algorithms/백준
[Python] 백준 4796번_캠핑
monzheld
2023. 2. 7. 18:44
https://www.acmicpc.net/problem/4796
4796번: 캠핑
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.
www.acmicpc.net
- 캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있음
- 강산이는 이제 막 V일짜리 휴가를 시작
- 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V)
- 입력
- 여러 개의 테스트 케이스로 이루어져 있음
- 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함
- 모든 입력 정수는 int범위
- 마지막 줄에는 0이 3개 주어짐
- 출력
- 각 테스트 케이스에 대해서, 강산이가 캠핑장을 최대 며칠동안 사용할 수 있는지 예제 출력처럼 출력
- 시간 제한: 1초
- 메모리 제한: 128 MB
"""
입출력 예시)
5 8 20
5 8 17
0 0 0
-> Case 1: 14
Case 2: 11
"""
## 의사코드 ##
# ex)
# 5 8 20 -> Case 1: 14
# L = 5, P = 8, V =20
# -> 연속하는 8일 중 5일동안만 사용 가능, 강산이 휴가는 20일짜리
# - 첫 번째 8일 중 5일 사용
# -> 남은 휴가: (20 - 8) = 12 / 캠핑장 사용 일수: 5
# - 두 번째 8일 중 5일 사용
# -> 남은 휴가: (12 - 8) = 4 / 캠핑장 사용 일수: 5 + 5
# - 남은 4일 중 4일 모두 사용
# -> 남은 휴가: 0 / 캠핑장 사용 일수: 5 + 5 + 4
# => 몫 = V // P
# 나머지 = V % P
# 캠핑장 사용 일수 = L * 몫 + 나머지
첫 번째 시도
i = 0 # Case number
while True:
L, V, P = map(int, input().split())
if L == 0 and V == 0 and P == 0:
break
i += 1 # Case number + 1
res = (L * (V // P)) + (V % P)
print(f"Case {i}:", res)
-> 틀림 (L, P, V 순서를 잘못 씀..!)
두 번째 시도
i = 0 # Case number
while True:
L, P, V = map(int, input().split())
if L == 0 and V == 0 and P == 0:
break
i += 1 # Case number + 1
res = (L * (V // P)) + (V % P)
print(f"Case {i}:", res)
-> 틀림
통과한 코드
i = 0 # Case number
while True:
L, P, V = map(int, input().split())
if L == 0 and V == 0 and P == 0:
break
i += 1 # Case number + 1
n = V // P
r = V % P
# 나머지가 L보다 작은 경우, 나머지를 더함
if r < L:
res = (L*n) + r
# 나머지가 L보다 크거나 같은 경우, L을 더함
else:
res = (L*n) + L
print(f"Case {i}:", res)
-> 나머지가 L보다 큰 경우, 나머지를 더하는 게 아니라 L을 더해야 함
참고)
https://velog.io/@dding_ji/baekjoon4796
백준 4796. 캠핑 문제풀이 (Python/파이썬)
🔎 백준 4796번 캠핑 문제풀이 (파이썬)
velog.io