[BOJ] 4796번: 캠핑

HyeRyun·2021년 2월 15일
0

Baekjoon Online Judge

목록 보기
14/30

✔️ 문제

등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다.

캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다.

강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까?

강산이는 조금 더 일반화해서 문제를 풀려고 한다.

캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V)


[입력]
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.

[출력]
각 테스트 케이스에 대해서, 강산이가 캠핑장을 최대 며칠동안 사용할 수 있는지 예제 출력처럼 출력한다.

😎 소스 코드

day = 0
answer = []

while True:
	L, P, V = map(int, input().split())
	
	if L == 0 and P == 0 and V == 0:
		# 입력 종료
		break
	else:
		afterCycle = V % P
		if L < afterCycle:
			day += L
		else:
			day += afterCycle
		cycle = V // P
		day += cycle * L
		
		# answer에 캠핑 가능한 날짜를 넣어줌
		answer.append(day)
		day = 0

for i in range(len(answer)):
	print(f'Case {i+1}: {answer[i]}')

✊ 문제를 풀고 나서

글로 읽었을 때 와닿지 않아서 그림으로 그려보고 문제를 이해했다.

그려보니 어떻게 풀어야 할 지 감이 와서 바로 코드 작성했다. 총 휴가 기간(V)에서 연속하는 P일을 제외한 나머지 일수(이 날짜들을 afterCycle이라고 정함)와 P일이 몇 번 가능한지(이걸 cycle이라고 했음)를 확인하면 되는 문제이다.

주의할 점은 afterCycle이 캠핑 이용 날짜(L)보다 클 경우이다. 처음에 이걸 생각 못해서 2 8 20의 입력을 넣었을 때, 정답은 6인데 내 출력은 8이어서 뭐가 틀렸나 고민했다ㅎㅎ;;

profile
개발개발

0개의 댓글