본문 바로가기

python3/자료구조 & 알고리즘

백준 알고리즘 1712번 - math 모듈

백준알고리즘 1712번

 

1차 시도에서는 가뿐하게 반복문으로 풀어야겠다는 생각으로

A, B, C = map(int, input().split())
num = 0
while True :
    num = num + 1
    TC = A + B * num
    TI = C * num
    if TC < TI :
        break
print(num)

 

이렇게 코드를 작성했으나 시간 초과라는 결과가 떴다. ( 지금 보니, 손익분기점이 나오지 않을 경우를 고려하는 것을 빼먹은 것 같다.)

 

그닥 시간이 오래 걸릴 것 같지 않다고 생각했는데, 알고보니 ABC의 범위가 너무 컸다.

 

그래서 반복문을 사용하면 시간이 꽤 걸릴 수 있다는 다른 사람의 조언에 납득을 하고 반복문 없이 코드를 작성했다.

 

A, B, C = map(int, input().split())
if B > C :
    print(-1)
else :
    num = A / (C - B)
    import math
    if int(num) != num :
        print(int(math.ceil(num)))
    elif int(num) == num :
        print(int(num + 1))

 

그래서 작성한 코드가 이건데, 일단 주어진 조건에서 손익분기점이 될 만한 수를 직접 손으로 계산해서 num에다가 집어넣었다.

 

그리고 남은 num 이 소수점을 가지지 않을 경우에는 num에 지점에서 이익이 0일 것이므로 num + 1을 손익분기점으로

지정했다.

 

num이 소수점을 가질 경우에는 math 모듈에서 소수를 올림, 내림, 반올림할 수 있는 모듈을 가져와,

 

그 중에서 올림을 하는 math.ceil()을 사용하여 손익분기점을 지정했다.

 

지금보니 num은 항상 자연수니까 그냥 int(num) + 1을 할 수도 있었다.

 

그렇게 해서 정답은 얻었는데 왠지 이번에는 시간초과가 아니라 런타임 에러가 뜬다. 일단 이 문제는 보류해야할 것같다.

 

더보기
  • math  모듈
    • 소수를 내림 : math.floor()
    • 소수를 올림 : math.ceil()
  •  반올림하려면? 내장 함수 round()