반응형
문제
- 등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다. 캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다. 강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까? 캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V)
- 강산이는 조금 더 일반화해서 문제를 풀려고 한다.
- 캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다.
입력
- 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.
5 8 20
5 8 17
0 0 0
출력
- 각 테스트 케이스에 대해서, 강산이가 캠핑장을 최대 며칠동안 사용할 수 있는지 예제 출력처럼 출력한다.
Case 1: 14
Case 2: 11
내가 제출한 풀이 - 정답
import sys
cnt = 0
while True:
cnt += 1
res = 0
l, p, v = list(map(int, sys.stdin.readline().strip().split()))
if l == 0 and p == 0 and v == 0:
break
res = (v // p) * l
res += min(v % p, l)
print(f"Case {cnt}: {res}")
문제풀이
l = 5, p = 8, v = 20이라고 보도록하자.
총 휴가일수 20일(v)동안 캠핑장을 연속 8일(p)동안 5일(l)동안만 캠핑장을 쓸수 있다.
쉽게 말하면 v // p는 총 몇 번 캠핑장이 열리는지 알려주고 * l을 해주면 캠핑장을 며칠 쓸수 있는지 알 수 있다.
결론적으로 (v // p) * l은 내가 휴가동안 캠핑장을 몇 번 쓸수 있는지 알려준다.
res = (v // p) * l
총 20일동안 캠핑장 2번(16일) 열었다면 4일이 남게된다.
그러면 나머지 4일과 l과 비교하여 추가적으로 며칠 더 사용할 수 있는지 알 수 있게된다.
하지만 5일동안 이용할 수 있지만 남은 일수가 6일이라면 5번만 사용할 수 있게 된다. 그러면 min 함수로 비교를 통해 더 적은 값을 더해주면 된다.
res += min(v % p, l)
반응형
'Python 알고리즘' 카테고리의 다른 글
[Python 알고리즘] 백준 128475번 : 모두의 마블 (0) | 2022.02.19 |
---|---|
[Python 알고리즘] 1541번 : 잃어버린 괄호 (0) | 2022.02.12 |
[Python 알고리즘] 백준 1946번 : 신입사원 (0) | 2022.02.12 |
[Python 알고리즘] 백준 13458번 : 시험 감독 (0) | 2022.02.06 |
[Python 알고리즘] 백준 2217번 : 로프 (0) | 2022.02.06 |