728x90
문제 개요
문제 링크: https://www.acmicpc.net/problem/2869
문제를 설명하자면 어느 날 달팽이가 우물을 올라가기로 결심했습니다.
하지만 이 우물의 높이는 V미터이고, 달팽이는 다음과 같은 규칙으로 이동합니다.
- 낮에 A미터 올라감
- 밤에 B미터 미끄러짐
이 행동을 반복하면서, 달팽이는 언젠가 꼭대기에 도달하고 말 겁니다.
여기서 질문은 이 달팽이는 며칠 만에 우물 꼭대기에 도달할까요?
예를 들어 입력이
2 1 5
이 들어왔다면
- 낮에 2미터 올라가고
- 밤에 1미터 미끄러지고
- 우물의 높이는 5미터라는 뜻입니다.
진행과정을 자세하게 살펴보겠습니다.
날짜 | 아침에 올라감 | 저녁에 미끄러짐 | 위치 |
1일차 | +2 | -1 | 1 |
2일차 | +2 | -1 | 2 |
3일차 | +2 | -1 | 3 |
4일차 | +2 | -1 | 4 |
5일차 | +2 | 도착! | 6 |
그럼 최종적인 정답은 5일이 됩니다.
여기서 핵심은 도착한 마지막날에는 미끄러지지 않는다는 점입니다.
달팽이는 아침에 올라가고, 만약 올라간 후 꼭대기 이상이라면 그날로 끝입니다.
따라서 밤에 미끄러지는 것은 "도착 전까지만" 고려하면 됩니다.
수학 공식으로 살펴보면
- 하루에 실제로 올라가는 양 =
- 도착 직전까지 올라가야 하는 높이 =
- 그럼
로 나눈 뒤, 마지막 하루를 더해주면 됩니다.
이제 python으로 문제를 풀어보겠습니다.
import sys
import math
def solve():
# A: 낮에 올라가는 거리, B: 밤에 미끄러지는 거리, V: 총 높이
A, B, V = map(int, sys.stdin.readline().split())
# 핵심 개념:
# 마지막 날에는 미끄러지지 않기 때문에,
# V - A 만큼을 매일 (A - B)만큼 이동한다고 보고,
# 그걸 올림해서 일수 계산 후 +1 해주면 된다.
days = math.ceil((V - A) / (A - B)) + 1
print(days)
if __name__ == "__main__":
solve()
핵심 코드는 days = math.ceil((V - A) / (A - B)) + 1
이 부분 입니다.
(V - A)
는 마지막 날을 제외한 거리- 하루에
A - B
만큼 올라감 → 이만큼 반복하면 마지막 날 도달 가능 +1
은 마지막 날 “올라간 후 미끄러지지 않는” 하루
728x90
반응형
'python > algorithm' 카테고리의 다른 글
[백준 11399번] ATM |
2025.05.30 |
---|---|
[백준 11047번] 동전 0 |
2025.05.28 |
[백준 2042번] 구간 합 구하기 |
2025.05.21 |
[백준 11866번] 요세푸스 문제 0 - 큐 |
2025.05.20 |
[백준 10866번] 덱 – 덱 자료구조 구현 |
2025.05.19 |