https://www.acmicpc.net/problem/4796
문제
등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다.
캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다
강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까?
강산이는 조금 더 일반화해서 문제를 풀려고 한다.
캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V)
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.
출력
각 테스트 케이스에 대해서, 강산이가 캠핑장을 최대 며칠동안 사용할 수 있는지 예제 출력처럼 출력한다.
소스코드
풀이
★ while True 구문으로 무한 반복문을 돌면서, l,p,v의 값이 모두 0이 들어왔을 때 반복문 종료
★ a와 b라는 변수 설정. a는 v를 p로 나눈 몫, b는 v를 p로 나눈 나머지.
★ 최대 캠핑장 사용일수를 구할 때 다음과 같이 ans = a* l + b를 해주면 오답이 뜨게 됩니다.
예를 들어 l,p,v,에 5,8,20이 들어온 경우에 a = 2, b = 4가 되고 정답인 ans는 2 * 5 + 4 => 14로 맞출 수 있습니다.
하지만 l,p,v에 3,8,20이 들어온 경우에는 b에 대한 조건절이 없으면 정답은 9인데도 10이 출력되게 됩니다.
그 이유는 b가 l 보다 큰 상황이 존재할 수 있기에 그에 대한 조건절을 처리해줘야 합니다. b는 휴가 일수를 가능한 시간동안 사용하고 남은 날짜입니다. 남은 날짜가 연속하는 p일 중, l일 보다 크게 된다면 남은 일자가 l일을 넘을 수 없기 때문에
b를 l로 바꿔줘야 합니다.
그렇기에 if b > 1일 때, b = l 코드를 작성하여 그러한 부분을 조건문 처리 해줍니다.
'Algorithm > 백준' 카테고리의 다른 글
[백준 알고리즘] 2738번: 행렬 덧셈 (Python) (0) | 2023.04.21 |
---|---|
[백준 알고리즘] 7568번: 덩치 (Python) (1) | 2023.04.20 |
[백준 알고리즘] 1439번: 뒤집기 (Python) (0) | 2023.04.18 |
[백준 알고리즘] 2217번: 로프 (Python) (0) | 2023.04.18 |
[백준 알고리즘] 1929번: 소수 구하기 (Python) (0) | 2023.04.07 |