알고리즘

[파이썬] 단계별 백준 문제 풀기 - 2869 기본수학 (달팽이는 올라가고 싶다)

햄❤️ 2021. 3. 9. 23:14
반응형

 

 

문제

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

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

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

입력

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

출력

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

 


<<코드>>

import math # ceil() 올림함수 사용을 위해 math 모듈 삽입
A,B,V = map(int,input().split())

day = math.ceil((V-A)/(A-B) + 1) 
 # 1일차에는 달팽이가 V에서 A만큼 올라간다. 
 # 자정이 지나면 하루가 바뀌므로 내려가는건 2일차다 그 다음부터는 a-b 씩 올라간다.
 # 즉 (V-A)/(A-B) 만큼을 계산해서 1일차에 달팽이가 올라가는 A를 다시 더해준다.
 # (V-A)/(A-B) + 1 을 다시 풀어보면 (V-B)/(A-B) 가 된다. 

#결과값 출력
print(day)

 

<<결과값>>

$ python main.py
2 1 5
4

달팽이가 정상에 가면 미끄러지지 않는 것이 중요하다. 

첫날 달팽이는 올라가기만 한다. 밤이되면 하루가 지나가니깐 2일째부터 미끄러진다.

2일째부터 달팽이는 a-b 만큼 꾸준히 올라간다. 즉 Vm에서 첫날 올라가는 a를 빼주는 남은 날들은 a-b로 꾸준히 올라가는 것!!!

(V-A)/(A-B)로 남은 날 올라간 일자를 계산해준다. 그리고 첫날의 1일을 더해주면 총 걸린 일 수가 나온다

 

만약 

V = 10, A = 5, B= 2 일때, (V-A)/(A-B)는 1.66xx 가 나온다. 즉 하루가 지나가버려서 2일로 쳐야한다. 그래서 math모듈을 import하고 ceil() 올림함수를 넣었다.

 

1을 더하고 올림을 하는 것과 올림을 하고 1을 더하는것이 큰 차이가 없어서 그냥 1을 더하고 올림처리했다.

 

 - math모듈 삽입

  -> import math

 - 올림함수 math.ceil()

 

728x90
반응형