티스토리 뷰
문제
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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
노트
이 문제에서 설명하는 손익분기점은 회계학에서 정의하는 손익분기점과 다를 수 있다.
해설
역시 수학으로 분류된 문제라서 코딩 자체보다는 문제를 수학적으로 접근하는 것이 문제해결의 열쇠가 된다. 난 이것과 무관하게 손익분기점이 없는 경우에 대한 처리가 있다는 것 간과하는 것에서부터 첫 단추를 잘못 끼고 있었다.
먼저 손익분기점이 발생하지 않는 경우에 대해서 생각해보자. 어렵게 생각할 필요가 없다. 고정비용은 논외로 하고 제작 비용보다 판매 비용이 낮다며 절대 손익분기점이 발생할 수 없다. 같은 경우 역시 고정 비용이 있기 때문에 불가능하다. 손익분기점이 발생하기 위해서는 최소한 제작 비용보다 판매 비용이 커야 한다.
두 번째, 몇 대를 팔아야 손익분기점에 도달할 것인가의 문제다. A + B * 판매대수
와 C * 판매대수
를 비교하여 전자가 커지는 시점의 판매대수를 찾으면 된다. 판매대수를 1부터 시작하여 +1을 해가면 비교를 하는 방법이 있으나 이 방법으로는 채점을 통과할 수 없다. 판매 대수를 x라고 했을 때 A + Bx < Cx
이므로 식을 정리하면 아래와 같다.
이 식을 등식으로 본 x 값에 1을 더하게 되는 늘 우변이 큰 경우가 될 것이다.
이렇게 식을 정리하면 단 한번의 계산으로 판매 대수를 확인할 수 있게 되어 시간 제한에서 자유로울 수 있게 된다.
이를 코드로 완성하면 아래와 같다.
소스코드: C
#include <stdio.h>
int main(int argc, char *argv[])
{
int fix, unfix, price;
scanf("%d %d %d", &fix, &unfix, &price);
if (unfix >= price) {
printf("-1\n");
} else {
printf("%d\n", fix / (price - unfix) + 1);
}
return 0;
}
'Python > 심사문제' 카테고리의 다른 글
백준(BAEKJOON): 분수찾기(1193번) (0) | 2020.04.10 |
---|---|
백준(BAEKJOON): 벌집(2292번) (0) | 2020.03.29 |
백준(BAEKJOON): 그룹 단어 체커(1316번) (0) | 2020.03.28 |
백준(BAEKJOON): 크로아티아 알파벳(2941번) (0) | 2020.03.28 |
백준(BAEKJOON): 상수(2908번) (0) | 2020.03.28 |
- Total
- Today
- Yesterday
- QtDesigner
- word
- QLabel
- QGridLayout
- words
- MacOS
- PyQt5
- setText()
- locallibrary
- 소수
- C
- django
- 북한말
- 리찬규
- BOJ
- QComboBox
- 유래
- Python
- QLineEdit
- 어원
- 백준
- Tistory
- 리규찬
- books
- NK
- baekjoon
- Mac
- judge
- python3
- tips
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |