# [Algorithm/JS] 백준 1712번 손익분기점
# Question
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.
노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오..
# Input
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.
# Output
첫 번째 줄에 손익분기점 즉 최초로 이익이 ㅁ발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.
# Example
# Input 1
1000 70 170
# Output 1
11
# Input 2
3 2 1
# Output 2
-1
이 외의 입출력은 상단의 문제 바로가기 링크에서 확인
# Solution
/**
* 고정비용 A : 매년 임대료, 재산세, 보험료, 급여 등...
* 가변비용 B : 재료비와 인건비 등...
* ex / A=1000, B=70 의 경우
* 노트북 한 대 | 1000+70 = 1070
* 10대 | 1000+(70*10) = 1700
* 노트북 가격 C 만원
* 총비용(고정+가변) < 판매비용(수입) = 최초로 수입이 많아질 때 손익분기점
*
* 비용 = 고정비용 + (가변비용 * n)
* 수익 = 노트북가격 * n
*
* 손익분기점을 구할 수 없는 조건?
* 비용 < 수익
* 고정 + 가변 * n < 노트북가격 * n
* 고정 < (노트북 * n) - (가변 * n)
* 고정 < (노트북 - 가변)n
* 고정 / (노트북 - 가변) < n
* n은 손익분기점을 발생시킬 개수이므로 양수, 좌항의 분모인 (노트북 - 가변) 양수.
* => 노트북 - 가변 <= 0 이라면 -1을 출력
* n 이 고정 / (노트북 - 가변) 보다 커지려면, 고정 / (노트북 - 가변) 값에 1을 더하면 손익분기점
* => 손익분기점 = 고정 / (노트북 - 가변) + 1
*/
const fs = require('fs);
const [A, B, C] = fs.readFileSync('../input.txt').toString().trim().split(' ').map(Number);
let n = 0;
if (C - B <= 0) n = -1;
else n = Math.floor(A / (C - B)) + 1; // 손익분기점
console.log(n);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
고정비용을 A, 가변비용을 B, 노트북의 가격을 C 변수로 선언, 할당한다.
손익분기점을 구하는 문제인데, 여기서 손익분기점은 판매비용(수입) 이 총비용(고정+가변) 보다 많아져 이익이 발생하는 지점이라고 한다. 그렇다면 판매비용과 총비용은 아래 식으로 작성할 수 있다.
수입 = 고정비용 + (가변비용 _ n)
총 비용 = 노트북가격 _ n수익 < 총 비용
n 은 노트북의 개수이다.
# 손익분기점이 없을 경우
문제에서 수익분기점이 없을 경우 -1 을 출력한다고 했다. 그렇다면 손익분기점을 찾기전에, 손익분기점을 구할 수 없는 조건을 알아야한다. 위 부등식을 풀어쓰면
수익 > 총 비용
= 노트북 가격 _ n > 고정비용 + (가변비용 _ n)
= (노트북 가격 - 가변비용) * n > 고정비용
= n > 고정비용 / (노트북 가격 - 가변비용)
이렇게 풀어쓸 수 있다. 여기서 n 은 손익분기점을 판별할 개수이므로 무조건 양수를 이어야 하며, 고정비용 또한 양수이어야한다.
그 말은 좌항의 분모인 노트북가격 - 가변비용
이 양수를 가져야한다는 말이된다. 죽, 노트북가격 - 가변비용
이 보다 작다면 n으로 값은 -1을 할당할 수 있다.
if (C - B <= 0) n = -1;
# 손익분기점 구하기
손익분기점을 구할 수 없는 조건을 알았다면 손익분기점은 쉽게 구할 수 있다.
n이 위 최종 부등식 결과의 고정 / (노트북 - 가변)
보다 1이 크다면 그 순간 이익이 발생하는 지점이 되므로 손익분기점은 A / (C - B)) + 1
으로 쓸 수 있다. 여기서 나누어떨어지지 않을 경우를 대비해 Math.floor
를 사용한다.
if (C - B <= 0) n = -1;
else n = Math.floor(A / (C - B)) + 1; // 손익분기점
2