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

 

1712번: 손익분기점

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

www.acmicpc.net

 


 

문제 해결 방법

문제를 잘 이해하면 쉽게 풀 수 있었던 문제였다.

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

'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