개발 연습장/백준 문제풀이

[파이썬, Python] 백준 2869: 달팽이는 올라가고 싶다

LooanCheong 2022. 12. 15. 14:27
반응형

문제

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

 

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

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

www.acmicpc.net

코드

시간 초과 코드

import sys
a, b, v= map(int, sys.stdin.readline().split())
n = 1
while True: 
    if (a*n - (b*(n-1))) < v:
        n += 1
    else:
        break
print(n)

정답 코드

a, b, v= map(int, input().split())
days = (v-b)/(a-b)
print(int(days) if days == int(days) else int(days)+1)

설명

처음에는 간단하게 생각하고 금방 풀릴 줄 알았던 문제인데,
시간 초과의 늪에 빠졌다.

반복문을 돌다 보니 수가 적을 때는 상관이 없지만 커지면 시간이 기하급수적으로 늘어나기 때문인데,
이를 해결하기 위해선 식을 수정해서 날짜가 한 번에 계산이 될 수 있게 해야 했다.

그렇게 수정한 코드가 아래의 코드이다.
days가 int(days)와 같으면 그대로 출력해주고 그렇지 않으면 1을 더한 값을 출력해주어 소수가 출력되는 결과를 막았다.

반응형