백준 2869 - python3

박우영·2023년 1월 8일
0

백준 단계별

목록 보기
42/85

https://www.acmicpc.net/problem/2869

문제)

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력)

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력)

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

예제 입력1)

2 1 5

예제 출력1)

4

예제 입력2)

5 1 6

예제 출력2)

2

예제 입력3)

100 99 1000000000

예제 출력3)

999999901

시간 제한: 0.15초 / 메모리 제한: 128MB

문제 풀이)

문제를 풀기 앞서 시간제한이 0.15초이다. 반복문을 사용하면 시간복잡도가 선형으로 풀어지기 때문에 O(N) 이나와서 반복문을 사용하여 풀면 시간 초과 판정

v = (a - b) * n(일수) + a 인데 마지막일수는 잠을 안자고 올라가기때문에 b값을 빼면 안된다. 이 점을 유의하고 풀어보도록 하자.

거/속*시 공식에 따라
(a-b) = 하루 이동속도 라고 생각하고
v-a-b/a-b 가 도착 전날 값이 된다.
하루 이동거리가 a이니 거리값에 a 를 더해주며 +1을 해주면
(v-b)/(a-b) 가 날짜가 된다 날짜는 소수가 될수없으니
int(k) 와 k 가 같을때는 정수라는 의미로 그대로 출력하면 되고
같지않다면 소숫점이있으니 올림대신 +1을 해준다.


두번째 풀이는 math 라이브러리 사용한 방법이다.

ceil은 소수점을 올림/ floor는 소수점을 내림 / round는 반올림
날짜에는 소수점이 없기때문에 올림인 ceil 을 사용해서 정수로 만들어준다. v = (a-b) * n + a 공식에 따라 v-a만큼의 거리를 구하고 마지막에 1을 더해주면 값을 구할수있다.

0개의 댓글