#56. 백준 1712번 문제 풀이: 손익분기점 문제 원본 보기
월드전자는, 매년 고정비용(임대료, 재산세, 보험료, 급여 등) A만원이 들며, 한 대의 노트북을 생산하는 데 B만원의 가변비용이 든다. 예를 들어 A=1,000, B=70 이라면, 노트북 한대 생산하는데, 1,070만원, 열대 생산에 1,700만원이 든다. 노트북 가격이 C만원으로 책정되었다면, 노트북을 생산하다 보면 총수입이 총비용을 넘는 지점(손익분기점)이 나타난다. A, B, C 가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오. 입력: 첫줄에 A B C 가 공백구분으로 입력 출력: 손익분기점 즉 최초 이익이 발생하는 판래량을 출력. 손익분기점이 없으면 -1 출력.
입력/출력
--입력--
1000 70 170
--출력--
11
--입력--
3 2 1
--출력--
-1
--입력--
2100000000 9 10
--출력--
2100000001
문제풀이+해설
프로그램을 작성하다보면 무작정 조건이 만족할 때 까지, 루프를 돌려서 계산하는 경우가 많다.
알고리즘에서 제일 안좋은 방식중 하나다.

문제를 해결하기위해, 규칙이나 간단한 공식으로 계산되는지 고려해 볼 필요가 있다.
이 문제의 의도는 간단한 공식을 유도하는 게 핵심인 듯 싶다.
아래와 같이 공식을 유도할 수 있다.
--
x(노트북대수) 라 하자.
 A(고정비) + B(1대생산비) * x = 총비용 = C(1대가격) * x
 A + B * x = C * x
 A + B * x - C * x = 0
 (B - C) * x = -A
 x = -A / (B - C)  
---
간단한 공식으로 구현가능하다.
x(노트북대수)가 손익이 되기 시점의 대수이므로, 손익보다 클 경우의 노트북 대수를 구하므로, +1 대를 해 주면 된다.
-값이 되는 경우( C(판매가)가 B(생산가) 이하 )인 경우는 수익이 발생하지 않는 경우이니 -1 처리하면 된다.
code sol.
#include <iostream>
using namespace std;

int main() {
  int a, b, c, x;
  cin >> a >> b >> c; // a, b, c 값을 입력받는다.
  if(b >= c) { // 생산비와 판매비 이상이면 수익이 없으므로 -1 처리
    cout << -1;
  } else {  
    x = -a / (b - c); // 손익분기점 공식에 넣는다.
    if(x < 0) {
      cout << -1; // 손인분기점이 없다.
    } else {
      cout << x + 1; // 손익분기점을 넘는 대수를 구해야 하므로 +1 을 해 준다.
    }
  }
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.