티스토리 뷰
https://www.acmicpc.net/problem/2869
import math
#A 달팽이가 낮에 올라가는 거리
#B 밤에 미끄러지는 거리
#V 높이가 V미터인 막대
A,B,V = map(int, input().split())
#하루에 A-B 만큼 올라감 +1은 마지막날을 의미함
# V-A만큼 올라가는데 필요한 일 수를 계산함
days = (V-A) // (A-B) +1
if (V-A) % (A-B) != 0: # 나머지가 있다면, 하루를 추가함
days += 1
print(days)
만약 오류가 발생한다면,
try:
# A 달팽이가 낮에 올라가는 거리
# B 밤에 미끄러지는 거리
# V 높이가 V미터인 막대
A, B, V = map(int, input().split())
# 하루에 A-B 만큼 올라감 +1은 마지막날을 의미함
# V-A만큼 올라가는 데 필요한 일 수를 계산함
days = (V - A) // (A - B) + 1
if (V - A) % (A - B) != 0:
days += 1
print(days)
except ValueError:
print("잘못된 입력입니다. 세 정수 A, B, V를 공백으로 구분하여 입력해 주세요.")
접근 방식:
- 첫 번째 날: 낮에 A 미터를 올라가지만, 밤에 B 미터 미끄러집니다. 첫 번째 날이 끝날 때는 실질적으로 A - B 미터만 올라가게 됩니다.
- 하지만 V 미터에 도달하면 더 이상 미끄러지지 않기 때문에 마지막 날은 다르게 처리해야 합니다.
- 마지막 날: 달팽이가 V 미터에 도달할 때, 더 이상 미끄러지지 않기 때문에 마지막 날에는 밤에 미끄러지는 일이 없습니다. 즉, 마지막 날은 A 미터를 다 올라가면 V에 도달합니다.
계산 과정:
- 목표는 V 미터를 올라가는데 필요한 일수를 구하는 것입니다.
- 첫 번째 날부터 V - A까지 올라가야 하는 거리입니다. 왜냐하면 마지막 날에는 달팽이가 A 미터를 올라가면 바로 정상에 도달하기 때문입니다.
- 그 나머지 거리는 하루에 A - B 미터씩 올라가게 됩니다.
어떻게 일수를 계산할까요?
- V - A만큼 올라가는 데 필요한 일수를 계산합니다. 하루에 A - B 미터씩 올라가므로, V - A를 (A - B)로 나누면, 얼마나 많은 "하루"가 필요한지 알 수 있습니다.
- (V - A) // (A - B)는 실제로 올라가는 일수입니다.
- 그런데 (V - A)를 (A - B)로 나누었을 때, 나머지가 있을 수 있습니다. 예를 들어, (V - A)가 (A - B)로 나누어 떨어지지 않는다면, 나머지만큼 추가적인 하루가 더 필요합니다. 그래서 나머지가 있으면 하루를 더 추가해 줍니다.
식 설명:
- (V - A) // (A - B)는 정상에 도달하기 전까지 걸리는 완전한 일수입니다.
- 나머지가 있을 경우, 마지막 날에 올라간 A 미터가 정상에 도달하게 해 주므로, 그 나머지 부분을 처리하려면 하루를 더 추가해야 합니다.
따라서,
- (V - A) // (A - B) + 1에서 +1은 마지막 날을 의미합니다.
- 그 후, if (V - A) % (A - B) != 0: 조건문은 나머지가 있으면 하루를 더 추가하는 부분입니다.
예시로 설명:
예시 1: A = 2, B = 1, V = 5
- V - A = 5 - 2 = 3 (정상에 도달하기 전까지 올라야 할 거리)
- 하루에 A - B = 2 - 1 = 1 미터를 올라가니까, 3 // 1 = 3일이 필요합니다.
- 마지막 날에는 2미터를 올라가면 정상에 도달하므로, 이 3일 후 하루를 추가하여 4일이 걸립니다.
결과적으로 4일이 걸리는 이유는 첫날을 포함한 3일과 마지막 날 1일이 더해져서 4일이 되는 것입니다.