안녕하세요. 성조입니다.
이 포스팅은 Python 3 버전을 기준으로 풀이됐습니다.
문제 출처
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
코드
A, B, V = map(int, input().split())
days = (V - B - 1) // (A - B) + 1
print(days)
풀이
1. A, B, V 값을 각각 입력받는다. [ A미터 올라간다, B미터 내려간다, V - 높이]
2. 총 올라가야 할 거리 V 높이에서 다음 날 밤에 이동한 거리를 제외하기 위해 현재 위치 b를 뺀 값에서 시작한다.
3. 최대 거리 a를 밤에 내려가는 거리 b 만큼 뺀 값인 (a-b)로 나눠준다. 다음 거리가 남았다면 a만큼 오르고, b만큼 내려가기 때문이다.
4. //를 통해서 올라가야 할 거리인 v-b-1 만큼 반복해서 정수로 나눈 몫을 구한다. -1 연산은 첫날의 끝에서 a-b 만큼 이동했기 때문이다.
5. 첫 날이 시작되는 부분을 포함시키기 위해서 분모에 1을 더해준다.
올바르지 못한 내용이나, 궁금한 내용이 있다면 언제든지 댓글로 지식을 얘기해 주시면 감사드리겠습니다.
더 좋은 포스팅 작성해 보겠습니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Python' 카테고리의 다른 글
[백준 - 3036][Python] 링 (0) | 2023.03.20 |
---|---|
[백준 - 10814][Python] 나이순 정렬 (0) | 2023.03.17 |
[백준 - 1924][Python] 2007년 (0) | 2023.03.14 |
[백준 - 11399][Python] ATM (0) | 2023.03.13 |
[백준 - 1439][Python] 뒤집기 (0) | 2023.03.12 |