본문 바로가기

BOJ(백준 문제풀이)

백준 2869 달팽이는 올라가고 싶다 solution[python, 파이썬] - 풀이, 설명::FBTT

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

 

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

문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽

www.acmicpc.net

문제
입출력

이 문제는 3번만에 답을 맞혔다. 이런 저런 실수를 하면서 시간이 초과되었기 때문이다.

 

1. 나무 막대를 올라가는데 걸리는 시간 유추(도착했을 때를 고려)

먼저 A미터만큼 B미터만큼 미끄러진다.

나무 막대 끝에 도달한 이후에는 day를 출력해야 하기 때문에 잠을 자면서 미끄러지지 않는 것을 고려해야 한다.

 

1
2
3
4
5
6
7
import sys
import math
A, B, V = map(int, sys.stdin.readline().split())
day1_high = A - B
day = (V - A) / day1_high
day = math.ceil(day)
print(day + 1)
cs

 

day1_high는 하루에 올라가는 높이(올라가고 자면서 미끄러진 높이를 모두 계산한)를 가리킨다.

 

day는 끝에 도착하기 하루 전까지의 일수를 가리키는 변수인데 2.xx일 같은 일수는 없으므로 모두 올림을 한다.

2.xx일 이라는 것은 2보다는 크기 때문에 3일에 걸쳐 올라가야 하는 높이이기 때문에 올림을 해준다.

 

그리고 day + 1을 출력해준다. 마지막 하루는 A만큼 올라가 막대 끝에 도착하는 날이기 때문이다.(B만큼 미끄러지지 않으면서)