본문 바로가기
백준 알고리즘 단계별 풀이 (문제 수)/기본 수학 1 (8)

[C++] 손익분기점 : 1712번

by 17번 일개미 2022. 7. 3.
728x90

문제

월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.

예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.

노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.

A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.

 

시간제한 : 0.35초


예제 입력 1

2100000000 9 10

예제 출력 1

2100000001

예제 입력 2

3 2 1

예제 출력 2

-1

문제 해석

 

A : 초기 투자 비용

B : 생산 비용

C : 판매 가격

 

이 문제는 시간제한이 존재한다. 또한 카테고리가 수학이므로, 수학적으로 접근해서 계산을 해야한다.

기존대로 판매 대수를 반복문을 돌며 증가시켜가면 시간제한에 걸리게 될 것이다.

 

일반적으로 식을 계산하여 반복문을 돌면서 판매대수를 증가시켜 총 수익 > 총 비용 인 지점을 찾게 되면

예제의 입력과 같이 2,100,000,000 (21억) 의 입력값이 들어오게 되면

int 형이 표현할 수 있는 범위를 벗어나게 될 것이다.

 

그것을 해결하기 위해 int 형을 long long int 등의 타입으로 선언할 시에 메모리 범위가 커져 시간제한에 걸릴 것이다.

 

따라서, 이 문제는 반복문을 전.혀 사용하지 않고 풀어야만 한다. 

여기까지만 읽고 힌트를 얻었다면 혼자 풀어보고, 정 모르겠으면 풀이를 본다.

 


풀이

#include <iostream>
using namespace std;


int main()
{
	int fixed; // 고정 비용
	int flexible;  // 생산 비용
	int price; // 판매 가격

	cin >> fixed >> flexible >> price; // 입력받기

	if (flexible >= price) // 비용이 판매가격 보다 크다면
	{
		cout << -1; // 손익분기점 없음
		return 0;
	}
	else cout << fixed / (price - flexible) + 1; // 고정 투자비용 / 판매 1회당 이익 = 판매 대수
}

우선, 손익분기점이 존재하지 않으려면 생산비용이 판매가격보다 비싸면 된다.

if (flexible >= price) // 비용이 판매가격 보다 크다면
	{
		cout << -1; // 손익분기점 없음
		return 0;
	}

그리고, 반복문을 사용하지 않고 판매 대수를 구하기 위해선 다음과 같이 할 수 있다.

fixed / (price - flexible) + 1;

고정비용이 예를 들어 1000만원이 들어갔다고 가정하자.

상품의 가격은 170만원이고, 상품 하나를 생산할 때 70만원의 비용이 든다고 가정한다.

 

그렇다면 상품 하나를 팔아 얻는 이득은 100만원이다.

 

처음 고정비용 1000만원은 지출이므로 1개 당 이득 X 판매 수량 이 1000만원이 되면,

처음 지출한 1000만원을 딱 갚는 시점, 즉 0 원의 총 이익이 된다.

 

식으로 표현하면   [1000 = 100 * 판매수량]  이 된다.

바꿔서 생각하면 [1000 / 100 = 판매수량] 이 된다.

 

다시 말해, [고정비용 / 1개당 이익 = "손익분기점의 직전 판매 수량"] 이 된다.

"손익분기점의 직전 판매 수량" 에  + 1을 하게 되면 "손익분기점이 시작되는 판매 수량" 이 된다.

 

이를 통해 반복문의 사용없이 수학적 접근을 통해 빠른 계산이 가능하다.

728x90