백준 알고리즘 문제 풀이 [Python]

[백준/Python] 2869번 달팽이는 올라가고 싶다 (기본수학1)

wlalsu_u 2023. 2. 23. 20:54

2869번 : 달팽이는 올라가고 싶다 문제

 

 

땅 위에 달팽이가 있다. 🐌

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

 

달팽이는 낮에 A미터 올라갈 수 있다.

하지만, 밤에 잠을 자는 동안 B미터 미끄러진다.

또, 정상에 올라간 후에는 미끄러지지 않는다.

 

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

 

 

 

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

 

2869번: 달팽이는 올라가고 싶다

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

www.acmicpc.net

 

 


 

풀이 코드

 

a, b, v = map(int, input().split())
day = 0

if (v-b)%(a-b) > 0:
    print((v-a) // (a-b) + 2)
else:
    print((v-a) // (a-b) + 1)

 

 

+ 문제 풀이 Point 🐌

1) 입력받은 막대 길이 v에서, 달팽이가 낮게 갈 수 있는 거리인 a를 뺌
    ( 마지막 날 낮에 정상에 올라간 후에는 미끄러지지 않으며, 달팽이가 움직일 수 있는 거리가 남을 수 있음)

2) 1의 값을 달팽이가 하루동안 움직이는 거리로 나눔

 

 

a, b, v = map(int, input().split())

 

 

- 첫째 줄에서 자연수 a, b, v 를 입력받음

 

- input().split() 으로 문자열을 공백으로 나눈 리스트로 바꿈

 

- map 을 이용하여 리스트의 모든 원소에 int() 함수를 적용

 

 

 

day = 0

 

 

- 달팽이가 나무 막대를 올라가는게 걸리는 날을 세기 위한 변수 day

 

- 0으로 초기화

 

 

 

if (v-b) % (a-b) > 0:

 

 

- 달팽이가 정상에 도달하기 까지 걸리는 날을 계산한 후, 나머지 값이 0 보다 클 때

 

 

 

print( (v-a) // (a-b) + 2)

 

 

- 입력받은 막대 길이 v 에서 달팽이가 낮에 갈 수 있는 최대 거리인 a 를 뺌

 

- 이를 달팽이가 하루에 갈 수 있는 거리인 (a-b) 로 나누어 몫을 구함

 

여기서, 나머지가 0보다 큰 경우였으므로, 달팽이는 몫 + 1 만으로는 정상에 도달할 수 없음
(나머지가 조금이라도 남으면, 하루를 더한다고 생각해야 하기 때문에)

 

- 따라서 하루를 더 이동해야 하므로, 2를 더해줌

 

 

 

else:

 

 

- 달팽이가 정상에 도달하기 까지 걸리는 날을 계산한 후, 나누어 떨어질 때

 

 

 

print( (v-a) // (a-b) + 1)

 

 

- 마지막 날, 낮에 갈 수 있는 최대 거리인 a 만큼 이동하면, 정상에 딱 도달할 수 있음

 

- 따라서 마지막날을 제외하고 올라온 day에, 마지막날인 1을 더함

 

 

 

 

 

 

 

나동빈 '이것이 코딩 테스트다 with 파이썬' 책을 참고하여 작성하였습니다.

https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC