안녕하세요. 지난 포스팅의 BOJ 1316번 : 그룹 단어 체커에서는 이중조건문을 이용해서 문자열과 관련된 문제를 풀어보았습니다. 오늘은 주제를 바꾸어서 수학적인 문제를 구현해보는 시간을 가져보도록 하죠.
완벽한 코딩은 존재하지 않습니다. 제가 제출한 코드 역시 마찬가지고 그저 참고만 해주시길 바랍니다.
핵심 포인트
- math 라이브러리
제출 코드
import math
A, B, C = map(int, input().split())
if B >= C : print(-1)
else : print(math.floor(A / (C - B) + 1))
해설
일단, 이 문제는 3개의 입력을 받게 됩니다. 각각 고정비용 $A$, 가변비용 $B$, 상품비용 $C$ 입니다. 그리고 $x$를 판매한 상품의 개수라고 하겠습니다. 이때, 손익분기점이라는 것은 상품의 생산비용 $A + Bx$가 상품의 판매비용 $Cx$를 넘어서는 $x$를 의미합니다. 따라서, 이를 부등식을 세워볼 수 있겠죠.
$$A + Bx > Cx \Rightarrow x > \frac{A}{C - B}$$
여기서 한 가지 주의할 점은 언제 손익분기점이 생기지 않을까요? 바로 $C$가 $B$보다 작거나 같을 때 입니다. 따라서, $C \le B$인 경우에는 항상 -1을 출력해주면 되겠죠. 이제 위 경우는 신경쓰지 않고 $C \ge B$인 경우만 생각해보도록 하겠습니다. 일단, $\frac{A}{C - B}$는 나누어떨어지는 자연수이거나 나누어떨어지지 않는 소수 중 하나 입니다. 따라서, 두 가지로 나누어서 각각 다르게 출력을 해볼수도 있겠지만, 저는 이를 하나로 합쳐서 출력해보도록 하겠습니다. 예를 들어, $A = 1000, B = 70, C = 170$인 경우에는 $\frac{A}{C - B} = 10$이기 때문에 $x > 10$을 만족하는 가장 작은 자연수 $x$가 11이 되어 손익분기점은 11이 됩니다. 다른 예시로 $A = 1001, B = 70, C = 170$인 경우에는 $\frac{A}{C - B} = 10.01$이기 때문에 $x > 10.01$을 만족하는 가장 작은 자연수가 $x$가 11이 되어 이 역시 손익분기점이 11이 됩니다. 어차피 저희는 출력을 자연수로만 하기 때문에 뒤에 붙은 소수는 필요없습니다. 그래서 math 라이브러리의 ceil 함수나 floor 함수를 이용해볼 수 있겠네요. 하지만, $\frac{A}{C - B}$ 자체로 ceil 함수나 floor 함수를 사용하면 저희가 원하는 결과를 출력할 수 없기 때문에 $\frac{A}{C - B} + 1$에 floor 함수를 적용해주면 됩니다.
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 1193번 : 분수찾기 (0) | 2022.07.08 |
---|---|
BOJ 2292번 : 벌집 (0) | 2022.07.06 |
BOJ 1316번 : 그룹 단어 체커 (0) | 2022.07.04 |
BOJ 2941번 : 크로아티아 알파벳 (0) | 2022.07.03 |
BOJ 5622번 : 다이얼 (0) | 2022.07.01 |