본문 바로가기
백준 알고리즘(BOJ)

백준 알고리즘 2869 (달팽이는 올라가고 싶다) - python

by Think_why 2019. 10. 15.

[ 문제 ] 백준 알고리즘 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가 나온다.

728x90

댓글