4796번: 캠핑
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.
www.acmicpc.net
아이디어:
(V // P)*L +
If V%P > L: L
If V%P < L: V%P
import sys
case = 0 #Case 숫자 변수
while True:
L, P, V= map(int, sys.stdin.readline().split())
if (L==0 and P==0 and V==0):
break
case+=1
if (V%P > L):
ans = V//P*L + L
else:
ans = V//P*L + V%P
print("Case %d: %d" %(case, ans))
동아리 다른 사람이 짠 코드:
i=1
while (1):
l,p,v=map(int,input().split())
if(l+p+v==0):break
n1=v//p*l
n2=v%p
n2=min(n2,l)
print('Case '+str(i)+': '+str(n1+n2))
i+=1
-> 나는 V%P가 L보다 큰 경우와 그렇지 않은 경우를 if 문으로 케이스를 나누었는데, 최솟값을 이용해 푸는 방법이 더 깔끔해 보인다. 더 이해하기도 쉬운 것 같다. 중복되는 연산도 피할 수 있다.
수정한 코드:
import sys
case = 0 #Case 숫자 변수
while True:
L, P, V= map(int, sys.stdin.readline().split())
if (L==0 and P==0 and V==0):
break
case+=1
n1 = V//P*L
n2 = V%P
ans = n1 + min(n2, L)
print("Case %d: %d" %(case, ans))
'알고리즘💻 > 그리디' 카테고리의 다른 글
BOJ 11399번: ATM (0) | 2021.01.15 |
---|---|
BOJ 2839: 설탕 배달 (0) | 2021.01.15 |
BOJ 1080번: 행렬 (0) | 2021.01.12 |
BOJ 16206번: 롤케이크 (0) | 2021.01.11 |
BOJ 14659번: 한조서열정리하고옴ㅋㅋ (0) | 2021.01.11 |