월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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
1000 70 170
예제 출력 1
11
예제 입력 2
3 2 1
예제 출력 2
-1
예제 입력 3
2100000000 9 10
예제 출력 3
2100000001
let ABC = readLine()!.split(separator:" ").map {Int($0)!}
let A = ABC[0] //고정비용
let B = ABC[1] //노트북 생산비용
let C = ABC[2] //노트북 가격
var n = 0
if (C - B) > 0{
n = A / (C - B) + 1
}
else if (C - B) <= 0{
n = -1
}
print(n)
해당 문제를 for 문 또는 while 문과 같은 반복문으로 풀 경우 시간 초과 라는 답변을 받게 됩니다...
(시간 제한 0.35초의 뜻 = 반복문을 사용하지 말고 수학적으로? 접근하라는 뜻)
C(노트북 가격)-B(노트북 생산비용)의 값이 0 또는 음수이면 손익분기점이 나오지 않기 때문에 -1을 출력
이익과 손해가 없는 구간(break even)이 존재할 수 있기 때문에 n(손익분기점 구간)을 구할 때는 마지막에 +1을 추가하여 최소한의 이익이 발생하는 구간을 찾을 수 있도록 한다. (n = A / (C - B) + 1)