신규 블로그를 만들었습니다!
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
Python 문제 풀이
처음에는 문제가 쉽다고 생각했는데, 주의할 점이 있다.
맨 꼭대기까지 올라갔을때는 미끄러지지 않는다는 것을 고려해야 한다.
애초에 나무의 값에서 낮에 올라가는 길이를 빼서 계산을 했다. (그림 1. 참고)
- 경우 1. 델타(낮과 밤의 이동거리의 차이)로 나누었을때, 딱 떨어진다면 낮에 움직여주면(
+1
) 정상에 도달한다. - 경우 2. 마찬가지로 델타로 나누었을때, 소숫점이 남아있다면 하루 더 올라가야 한다. (
+1
) 그리고 낮에 이동하면 정상에 도달한다. (+1
)
import sys
def solution(morning, night, tree):
"""ex2869. 달팽이는 올라가고 싶다
morning: 낮에 올라간 거리
night: 밤에 미끄러진 거리
tree: 나무의 높이
cur_height: 현재 높이
day: 일
"""
if morning >= tree:
return 1
delta = (morning - night)
day = (tree - morning) // delta
if (tree - morning) % delta == 0:
return day + 1
else:
return day + 2
if __name__ == "__main__":
a, b, v = map(int, sys.stdin.readline().split())
print(solution(a, b, v))
그냥 단순히 반복문을 돌려서 문제를 푸는 방법도 있지만, 그렇게 풀면 시간초과가 발생하기 때문에 정답을 맞힐 수 없다.
그렇기 때문에 마지막 순간만 고려해서 문제를 푸는것이 좋다.
결과
본 글은 직접 문제를 풀어보고 작성한 글입니다.
더 좋은 방법이 있거나 틀린부분이 있다면 댓글로 공유해주세요!
문제 원본
https://www.acmicpc.net/problem/2869
'Algorithm > 백준 온라인 저지' 카테고리의 다른 글
백준 2775번 - 부녀회장이 될테야 (Python3 풀이) (1) | 2019.12.30 |
---|---|
백준 1712번 - 손익분기점 (Python3 문제 풀이) (0) | 2019.12.23 |
백준 2588번 - 곱셈 (Python 문제 풀이) (0) | 2019.12.02 |
백준 2562번 - 최댓값 (Python 문제 풀이) (0) | 2019.12.01 |
백준 1330번 - 두 수 비교하기 (Python 문제풀이) (1) | 2019.11.30 |
최근댓글