Algorithm/BOJ
[백준/1712] 손익분기점 (with 파이썬)
Potato potage
2022. 10. 19. 13:55
반응형
✔ 문제
✔ 풀이
🙄 시간 초과
import sys
input = sys.stdin.readline
a, b, c = map(int, input().split())
x = 0
while True:
x += 1
if c - b < 0:
print(-1)
break
elif (c - b) * x > a:
print(x)
break
문제를 해석하면 c * x > a + b * x 공식이 나오는데 양변을 x로 묶어서 정리하면 (c-b)x > a 라는 공식이 나온다.
그래서 c - b가 음수이면 손익분기점을 넘기지 못하므로 -1을 출력, 만약 (c-b)x가 a보다 크다면 그때의 x 값을 출력하도록 했다. 계속해서 시간초과 오류가 나서 import sys도 써보고 y = c-b 도 추가해봤지만 계속해서 시간 초과가 떴다. 아마 큰 수가 들어오면 while 문에서 시간이 오래 걸려서 그런 것 같다.
👽 수정 코드
a, b, c = map(int, input().split())
if b >= c:
print(-1)
else:
print(a//(c-b) + 1)
while문 없이 b가 c보다 크거나 같으면 바로 -1을 출력, c가 b보다 크다면 a//(c-b) + 1의 값을 출력하도록 했다.
a//(c-b)가 되는 과정은 아래와 같다.
더보기
먼저 손익 분기점을 위한 공식은
C * X > A + B * X 이다.
1) C * X > A + B * X
2) CX - BX > A
3) (C - B)X > A
4) X > A // (C - B)
✔ 후기
while문으로 해결하는 방법이 수가 크면 역시나 시간 초과가 뜬다.
그리고 while문 없이 공식으로만 해결할 수 있는 방법이 있었는데 공식 계산 거의 다 해놓고 마지막 키 포인트를 찾지 못했던 점이 아쉬웠다.
반응형