728x90
728x90
문제
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.
노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.
출력
첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.
예제 입력 1
1000 70 170
예제 출력 1
11
예제 입력 2
3 2 1
예제 출력 2
-1
예제 입력 3
2100000000 9 10
예제 출력 3
2100000001
노트
이 문제에서 설명하는 손익분기점은 회계학에서 정의하는 손익분기점과 다를 수 있다.
출처
- 문제를 번역한 사람: author5
- 데이터를 추가한 사람: djm03178
알고리즘 분류
- 수학
- 사칙연산
문제 출처
https://www.acmicpc.net/problem/1712
문제 해결 방법
문제를 잘 이해하면 쉽게 풀 수 있었던 문제였다.
A : 고정 비용(Fixed Cost)
B : 가변 비용(Variable Cost)
C : 노트북 가격
문제에 제시된 지문으로부터 총 비용은 고정 비용(A) + (가변 비용(B) * 판매량(N)) 임을 알 수 있다.
총 수입은 판매 비용으로, 노트북 가격(C)과 판매량(N)을 곱한 값인 노트북 가격(C) * 판매량(N)이 된다.
최초로 총 수입이 총 비용 보다 많아져 이익이 발생하는 지점을 손익 분기점이라고 하는데, 이 손익 분기점을 구하기 위한 최소 판매량을 구하는 것이 이 문제의 핵심이다.
정리해보면 다음과 같다.
- 총 비용(totalCost) = 고정 비용(A) + (가변 비용(B) * 판매량(N))
- 총 수입(판매비용, totalIncome) = 노트북 가격(C) * 판매량(N)
- 총 수입 > 총 비용 <=> A + (B * N) > C * N
구하고자 하는 값이 판매량(N)이므로 N > A / (B - C) 를 만족시키는 최솟값 N을 찾으면 된다.
B - C 가 0 또는 음수가 될 경우(B - C > 0) 판매량은 자연수가 될 수 없으므로, -1을 출력하도록 한다.
그 외의 경우, 항상 올림된(Floored) 자연수가 출력되도록 하기 위해 A / (B - C)의 결과값에 1을 더한 값을 출력하도록 한다.
코드
#include <iostream>
using namespace std;
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
// A: Fixed Cost
// B : Variable Cost
// C : Laptop Price
unsigned int A, B, C;
cin >> A >> B >> C;
// totalCost = A + (B * N);
// totalIncome = C * N;
// Break Even Point : N
// C * N > A + (B * N)
// => (C - B) * N > A
// => N > A / (C - B)
if (B >= C) {
cout << "-1" << endl;
}
else {
cout << (A / (C - B)) + 1 << endl;
}
return 0;
}
채점 결과
참고
- [단계별로 풀어보기] > [기본 수학 1]
728x90
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ-2420][C++] 나부 함대 데이터 (0) | 2022.10.20 |
---|---|
[BOJ-2738][C++] 행렬 덧셈 (0) | 2022.10.20 |
[BOJ-2420][C++] 사파리월드 (0) | 2022.10.19 |
[BOJ-2292][C++] 벌집 ✨ (0) | 2022.08.27 |
[BOJ-1316][C++] 그룹 단어 체커 (0) | 2022.08.24 |
[BOJ-2941][C++] 크로아티아 알파벳 (0) | 2022.08.24 |
[BOJ-5622][C++] 다이얼 (0) | 2022.08.24 |
[BOJ-2908][C++] 상수 (2) | 2022.08.24 |