# [Algorithm/JS] 백준 1712번 손익분기점

🔗 문제 바로가기 (opens new window)

# 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
1

# Output 1

11
1

# Input 2

3 2 1
1

# Output 2

-1
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);
1
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;
1

# 손익분기점 구하기

손익분기점을 구할 수 없는 조건을 알았다면 손익분기점은 쉽게 구할 수 있다.

n이 위 최종 부등식 결과의 고정 / (노트북 - 가변) 보다 1이 크다면 그 순간 이익이 발생하는 지점이 되므로 손익분기점은 A / (C - B)) + 1 으로 쓸 수 있다. 여기서 나누어떨어지지 않을 경우를 대비해 Math.floor 를 사용한다.

if (C - B <= 0) n = -1;
else n = Math.floor(A / (C - B)) + 1; // 손익분기점
1
2
Last Updated: 2022. 6. 5. 오후 3:42:39