제목 : 손익분기점
- 문제 : 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.
노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.
- 입력 : 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.
- 출력 : 첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.
중학교 수준의 수학을 바탕으로 직접 코드를 구현해보는 문제이다. 수학적 난이도는 낮지만 예외상황 고려 등, 기본적인 프로그래밍 경험을 쌓기에 좋은 문제이다.
1대의 노트북을 판매할 때 마다 얻는 이익은 C(노트북 가격)-B(생산비용) 이다. 간단한 셈을 통해 초기비용 A까지 고려하면 손익분기점은 다음과 같다.
손익분기점 = A//(C-B) + 1
이는 노트북 한대 당 순이익이 초기 투자비용 A를 따라잡는 최소값이다. 그러므로 A, B, C를 입력받고 손익분기점을 계산하여 출력하며 된다. 라고 생각하면 반드시 틀린다. 왜냐하면 테스트 케이스는 상식적이지 않은 케이스를 포함하기 때문이다. 예를 들면 노트북을 판매할 때 마다 손해를 보는 경우(C<B), 노트북 생산비용과 가격이 같은 경우(C=B) 등…
그리고 문제는 친절하게도 이 경우 -1을 출력해야 한다고 언급까지 해주었다. 즉 이 경우를 예외처리하여 -1로 출력해주면 된다.
코드는 다음과 같다.
import sys
a, b, c = map(int, sys.stdin.readline().split())
if c<=b:#손익분기점이 존재하지 않는 케이스
print(-1)
else:
print(a//(c-b)+1)
의도치않게 저번주에 일이 몰려서 문제풀이를 건너뛰고 말았다…ㅠ 다시는 이런 일이 없도록 주의해야겠다.
또한 이전까지는 백준에서 단계별로 풀어보기의 단원 별로 한 두 문제씩만 풀었다. 왜냐하면 기초적인 문법을 배워보는 문제들이었기 때문이다. 하지만 이제부터(기본수학1)는 모든 문제를 정리하면서 갈 예정이다. 물론 내가 푸는데 성공한 문제들이겠지만…