개발스토리

백준 2869)달팽이는 올라가고 싶다 본문

알고리즘

백준 2869)달팽이는 올라가고 싶다

무루뭉 2021. 1. 8. 00:22

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

 

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

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

www.acmicpc.net

 

실패한 코드(시간 초과)

a, b, v = map(int, input().split(' '))
day = 1
day_one = a - b

while True:
    if day_one >= v:
        print(day)
        break
    else:
        day += 1
        if day_one * (day - 1) + a >= v:
            print(day)
            break


 

성공한 코드

import sys
import math

a, b, v = map(int, sys.stdin.readline().split(' '))
day_one = a - b

day = (v-a) / day_one + 1
print(math.ceil(day))

 

 

시간 초과에 안 걸리기 위해서 입력 방식도 바꾸고, math.ceil을 사용해서 계산 방식을 바꿨다.

v - a는 막대 길이에서 마지막 날 올라간 거리를 뺀 것이고, v - a를 하루동안 하루동안 올라가는 거리인 day_one으로 나눴다. 그 결과에서 1을 더해주어야 정상에 올라간 day를 구할 수 있다. 그리고 나누기 과정에서 ceil 함수를 통해 올림 처리 해주었다. (4.4일은 4일이 아니라 5일이기 때문이다.)

Comments