

문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 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()
'알고리즘' 카테고리의 다른 글
[파이썬] 단계별 백준 문제 풀기 - 1929 기본수학 (소수구하기) (0) | 2021.03.09 |
---|---|
[파이썬] 단계별 백준 문제 풀기 - 10250 기본수학 (ACM호텔) (0) | 2021.03.09 |
[항해99] 2주차 시작, 알고리즘 1주차 (0) | 2021.03.07 |
[파이썬] 단계별 백준 문제 풀기 - 2941 문자열 크로아티아 알파벳 (0) | 2021.03.07 |
[파이썬] 단계별 백준 문제 풀기 - 1157 문자열 (단어공부) (0) | 2021.03.06 |