문제풀이

[C언어] 백준 1712 손익분기점

어굴애 2021. 12. 24. 15:59
#include <stdio.h>

int main(void)
{
	int fixedCost, variableCost, price, q = -1;

	scanf("%d %d %d", &fixedCost, &variableCost, &price);

	if(variableCost < price)
		q = fixedCost / (price - variableCost) + 1;

	printf("%d", q);

	return 0;
}
  • 두 번의 수정과정을 거친 코드다
    • 첫번째
      while문으로 fixedCost + variableCost * q > price * q 일때마다 q를 증가시켜 문제를 풀었으나 시간초과로 실패함
    • 두번째
      조건문이 잘못되었음
      if (variableCost > price)
      q = -1;
      else q = fixedCost / (price - variableCost) + 1;       --> division by zero (runtime error)
      • 다시 생각해보면,
        상품의 가격이 가변비용과 일치하는 경우 고정비용이 0이든 뭐든 문제에서 요구하는 손익분기점은 존재하지 않는다. 
        이익자체가 날 수 없기 때문이다.
        따라서 variableCost <= price가 아닌 variableCost < price일때만 q를 구하도록 조건을 수정해야 한다.
  • 손익분기점의 일반적인 정의에 따라 총매출 = 총비용이 되는 지점을 구했는데,
    문제를 다시 읽어보니 여기서는 총매출이 총비용을 초과하는 지점이다.
    • fixedCost + variableCost * q > price * q
    • q -  fixedCost / (price - variableCost) > 0을 만족해야 한다.
    • 다시 풀어 쓰면 q = fixedCost / (price - variableCost)이 되는 q의 값보다 항상 1이 큰 값이 손익분기점이 된다.