반응형
밑의 링크는 백준에서의 문제 링크입니다.
파이썬 코드와 결과입니다.
# readline을 사용하기 위해 import합니다.
from sys import stdin
# 테스트 케이스의 번호를 저장하는 변수를 선언합니다.
# 1부터 시작하므로 1로 초기화합니다.
case = 1
# L, P, V가 모두 0일 때까지 반복합니다.
while True:
# 캠핑장을 연속하는 P일 중, L일 동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 사직했다.의
# L, P, V를 공백으로 구분해 입력합니다.
# 1 < L < P < V
# 각각 정수형으로 변환합니다.
L, P, V = map(int, stdin.readline().split(' '))
# L, P, V가 모두 0이라면
if L == P == V == 0:
# 반복문을 탈출합니다.
break
# 휴가 일수 V를 연속하는 P일로 나눈 몫을 저장하는 변수를 선언합니다.
P_cnt = V // P
# 휴가 일수 V를 연속하는 P일로 나눈 뒤의 나머지를 저장하는 변수를 선언합니다.
remain_day = V % P
# 캠핑장을 최대로 사용할 수 있는 일수를 저장하는 변수를 선언합니다.
# P_cnt와 L의 곱으로 초기화합니다.
camping_day = P_cnt * L
# remain_day가 L보다 크거나 같다면
if remain_day >= L:
# remain_day동안 캠핑장을 사용할 수 있는 L일 모두 캠핑장을 사용할 수 있으므로
# camping_day에 L을 더해줍니다.
camping_day += L
# remain_day가 L보다 작다면
else:
# remain_day만큼 더 캠핑장을 사용할 수 있으므로
# camping_day에 remain_day를 더해줍니다.
camping_day += remain_day
# 출력 형식에 맞게 출력합니다.
print(f'Case {case}: {camping_day}')
# 테스트 케이스의 번호에 1을 더해줍니다.
case += 1
처음 제출했을 때는 remain_day와 L일의 크기를 비교해주는 것을 고려하지 않고
무작정 camping_day에 remain_day를 더해줘버려서
remain_day가 L보다 클 때, 맞지 않는 결과가 나와 틀렸습니다 결과가 나왔습니다.
그리고 풀고나서 카테고리를 확인해봤는데 그리디 알고리즘을 의도한 문제였습니다.
그런데 그리디 알고리즘을 이용해서 이 문제를 푸는 방법이
계산 방법을 통해서 풀었던 제 방식보다 빠른 방법인지는 모르겠습니다.
나중에 그리디 알고리즘을 적용해서 한 번 더 풀어봐야겠습니다.
※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.
※ 더 효율적이고 빠른 정답을 환영합니다.
반응형
댓글