1712 손익분기점

/**
 * 고정비용 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);

고정비용을 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; // 손익분기점