본문 바로가기
Algorithm/Baekjoon

백준 2869번

by minhi 2024. 7. 9.

백준 2869번

 

처음으로 시간 초과 에러가 발생했다.

 

크기가 작은 입력값들에 대해서는 잘 작동하는데 나무의 높이가 아주 높을 경우에 이 에러가 발생하는 듯하다.

 

먼저 처음 작성한 코드

import sys

A, B, V = map(int, sys.stdin.readline().split())

total = 0
day = 0

while True:
    day += 1
    total += A
    if total >= V:
        break
    else:
        total -= B

print(day)

 

분명 저 반복문에서 시간 초과 에러가 발생했을 것이다.

 

반복문을 사용한 이유는 밤에 미끄러지지만 '정상에 도달하면' 미끄러지지 않는다는 조건을 반영하기 위해

 

A를 더하고 B를 빼기 전 total >= V 여부를 확인하기 위함이었다.

 

반복문 없이 이를 반영하려면 어떻게 해야 할까?

import sys
import math

A, B, V = map(int, sys.stdin.readline().split())

total = 0
day = 0

day = (V - B) / (A - B)

print(math.ceil(day))

 

먼저 올라가야 하는 높이를 V-B로 간주한다.

 

이렇게 하면 하루동안 올라가는 높이를 A-B로 생각할 수 있게 된다.

 

이제 V-B를 A-B로 나눈 뒤 올림하면 정상에 도달하는 데 며칠이 걸리는지 알 수 있다.

 

시간 초과 에러가 발생했을 땐 쓸데없는 반복이 이루어지지는 않는지 확인해보자.

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 2941번  (0) 2024.07.10
백준 2581번  (0) 2024.07.09
백준 2745번  (0) 2024.07.06
백준 2563번  (0) 2024.07.06
백준 10988번  (0) 2024.07.04