백준알고리즘 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()
'python3 > 자료구조 & 알고리즘' 카테고리의 다른 글
복합대입 연산자 (0) | 2020.01.28 |
---|---|
파이썬 자료구조 : 모두를 위한 프로그래밍 - 리스트 (0) | 2020.01.20 |
파이썬 자료구조 : 모두를 위한 프로그래밍 - 문자열 (0) | 2020.01.20 |