[BOJ/백준-Python]2869번 - 달팽이는 올라가고 싶다

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

해결할 방법을 생각해보자.💡

달팽이가 올라가는 거리는 A, 내려가는 거리는 B, 나무 막대의 높이는 V이다.

사실은 whlie문을 사용하면 쉽게 풀 수 있는 문제지만, 어쩐지 정답처리가 되지않고 시간초과가 나온다.

이것은 예제3과 같이 수가 컸을 때 반복문의 횟수가 많아지면 그만큼 오래걸리기 때문이다.

우선 입력부터 받고 생각해보자.

A, B, V = map(int, input().split())

문제에서 달팽이는 낮에는 올라가고 밤에는 미끄러진다고한다. 그리고 정상에 올라갔을 경우, 미끄러지지 않는다.는 중요한 점이 적혀있다.

이 점을 주의깊게 들여다보면, 다음과 같이 생각해볼 수도 있다.

미끄러지지 않는다면, 달팽이가 결국 올라가는 높이는 원래 높이 V에서 미끄러지는 높이 B를 뺀 것이구나!

따라서, 달팽이가 실질적으로 올라가야하는 정상은 (V-B)이다. 그리고 달팽이가 올라갔다 미끄러지는 것은 (A-B) 만큼이다. 이것이 하루에 달팽이가 움직이는 거리다.

코드로 표현해보자.

day = (V - B) / (A - B)

이렇게 짤 수 있을 것이다. 하지만, 여기서 문제점은 나누기(/)를 사용하기 때문에 예제 출력처럼 정수형태가 아닌 float형태로 나타난다. 또한, 예제 2번처럼 입력값이 5 1 6일 경우 1.25와 같은 형태로 나타난다. 여기서 조금 생각해보면 어쨋든 낮을 0.25와 같이 4분의 1정도만 사용해도 그날 하루도 이동한 것에 포함되니까 올림을 해주면된다.

그래서 올림을 사용하기 위해 파이썬의 math 라이브러리를 사용했다.

import math

math 라이브러리 중 ceil은 특정 값을 무조건 올림해주고 정수형으로 변환시켜준다.

이제 위의 문제점을 해결한 코드를 다시 작성해보자.

day = math.ceil((V - B) / (A - B))

이러면은 문제에서 원하는 값이 잘 저장될 것이다.

이제 출력만 해주면 문제 해결! 끝!

print(day)

코드💻

import math
A, B, V = map(int, input().split())
day = math.ceil((V - B) / (A - B))
print(day)

해결 로그

문제 푼 날짜 체크
2022-06-03
   
   
   
   

2022

[web]jQuery 복습 3

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

13 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

14 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

5 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

10 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑