[ 문제 ] 백준 알고리즘 2869 (달팽이는 올라가고 싶다) - python
> https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽
www.acmicpc.net
낮에 A만큼 올라가는데 밤에 B만큼 미끄러지고, V에 도달하면 종료
1일 2일 2.x일 => 3일째에 도달한다.
이러한 방식으로 하면 While문을 사용하는 떠올랐지만, 마지막 날은 낮만 올라가도 어짜피 하루를 쓰게 된다.
그래서 뒤에서부터 생각했다. V에서 마지막 B를 빼면 매일 (A-B)만큼씩 올라가게 된다.
수식을 정리하면, (V-B) / (A-B)일 동안 올라가게 된다.
이 때, 이 수식 결과 값이 소수점일 수도 있으니 올림을 해주면 된다. 2.x일은 결국 3일로 취급되기 때문이다.
구현 코드에서 올림을 사용한 방식이 2가지가 있다.
1. Python 내장함수 : math.ceil
2. 그냥 구현이지만 그나마 Python스럽게
[Code1]
import math
A, B, V = map(int, input().split())
crawl = math.ceil((V-B) / (A-B))
print(crawl)
[Code2]
A, B, V = map(int, input().split())
crawl = (V-B) / (A-B)
print(int(crawl)+1 if crawl % 1 > 0 else int(crawl))
추가 설명: A = 1.x일 때, A % 1 = 0.x가 나온다.
'백준 알고리즘(BOJ)' 카테고리의 다른 글
백준 알고리즘 10250 (ACM 호텔) - python (0) | 2019.10.15 |
---|---|
백준 알고리즘 15649 (N과 M(1)) - python (0) | 2019.10.15 |
백준 알고리즘 1011 (Fly me to the Alpha Centauri) - python (0) | 2019.10.15 |
백준 알고리즘 1193 (분수찾기) - python (0) | 2019.10.15 |
백준 알고리즘 2839 (설탕 배달) - python (0) | 2019.10.15 |
댓글