본문 바로가기
알고리즘-python/백준 문제

[백준/2869/파이썬(Python3)] 달팽이는 올라가고 싶다

by 빅데이터1020 2021. 7. 12.
SMALL

 

문제 출처

 

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

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

www.acmicpc.net

 

풀이코드

 

총 3번 답안을 작성해서 풀었습니다.

2번째까지의 답안은 시간초과가 났고 세 번째 답안은 통과!

백준코드에서 수학문제라고 나오는 문제들은 for문이나 while문으로 접근하면 시간초과가 나는 것 같습니다.

 

처음에는 while문으로 달팽이가 올라갔다가 미끄러진 것을 적용했습니다.

a, b, v = map(int, input().split())

height = a
days=1
while True:
    height+=a
    days+=1
    if height > v:
        print(days)
        break
    height-=b

하지만 테스트케이스 [100 99 1000000000] 에서 시간초과

 

 

두 번째 접근에서는 높이(height) 변수를 없애고 while 문에 수식을 만들었습니다.

a, b, v = map(int, input().split())

days=0

while True:
    days+=1
    if a*days - b*(days-1)>=v:
        print(days)
        break

하지만 역시 테스트케이스에서 시간 초과.....

while로 반복하는 것으로 접근하는 것 자체가 문제인 것이라 느껴서

저 수식을 다르게 변형하기로 했습니다.

 

 

정답

a, b, v = map(int, input().split())

days = (v-b) / (a-b)

if days == int(days):
    print(int(days))
else: print(int(days)+1)

반복하지 않도록 코드를 바꾸니 테스트케이스도 통과하고 답안으로 채점완료!

LIST