Python/online judge

백준 [2869.달팽이는 올라가고 싶다] | Python

구름솜:D 2023. 12. 13. 09:46
728x90

✏️ 문제

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

 

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

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

www.acmicpc.net

 

✏️ 풀이방법

1. 나무막대에 도달하는 날을 x라고하면, 총 올라가는 횟수는 x번, 내려오는 횟수는 x-1번이다.

2. Ax - B(x-1) = V를 x에 대한 식으로 정리하면 x = (V-B)/(A-B)이다.

3. x가 정수이면 x일에 나무를 다 올라간것이지만, x가 정수가 아니라면 +1을 한다.

 

 

📌 코드

A, B, V = map(int, input().split())

x = (V-B)/(A-B)
if x == int(x):
    print(int(x))
else:
    print(int(x) + 1)

 

 

📌 결과

2 1 5  #입력
4      #출력
5 1 6  #입력
2      #출력
100 99 1000000000  #입력
999999901          #출력

 

 

🤔 시행착오.1

a,b,v = map(int,input().split())
step, day_step = 0,0
cnt_day = 0
for i in range(v):
    day_step = step + a
    if day_step >= v:
        cnt_day = i
        break
    else:
        step = day_step - b
print(cnt_day + 1)
2 1 5  #입력
4      #출력

- 올라가는 step를 나무의 높이와 같을 때까지 하나씩 카운트하도록 for문을 사용했다.

- 입력량이 많으면 시간초과 발생한다.

- 예를 들어 낮에 2미터를 올라가고, 밤동안 1미터를 미끄러기는데 정상높이가 1,000,000,000 이라면 굉장히 많은 시간이 소요된다.

- 시간 초과가 나지 않으려면 반복문을 통해 계산하는 것이 아닌 다른 방법으로 계산해야한다.