문제
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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을 출력한다.
입출력 예
제출 코드
a, b, c = map(int, input().split())
n = 0
if b >= c:
print(-1)
else:
n = a / (c-b)
print(int(n)+1)
# else:
# while c*n <= a+b*n:
# n += 1
# print(n)
# 위 else문에서는 시간 초과가 뜨는데 while문이 너무나도 많이 돌 경우 그렇게 될 것 같다.
# 예를 들어 b = 100, c = 101이고 a가 아주 크다면 while문이 매우 많이 돌 것이다.
# 그래서 반복보다는 그냥 한 번에 수식을 짜는 것이 맞다.
(1) line 1, 2
고정 비용과 가변 비용, 노트북 1개당 판매 가격을 a, b, c에 각각 할당하고 판매 대수를 세기 위한 변수 n을 선언해준다.
(2) line 4, 5
'출력'에 대한 설명에서, 손익분기점이 존재하지 않는 경우는 -1을 출력하라고 한다. 손익분기점이 존재하지 않는 경우는 가변비용이 노트북 1개당 판매가격보다 크거나 같을 경우이므로, 조건문을 걸어둔다.
(3) line 6 ~ 8
이건 솔직히 수학을 코딩으로 옮겨놨다고 해도 무방하다. 먼저 프로그래밍적으로 접근하기 위해 line 12 ~ line 15처럼 짰었으나, 입력값이 딱 봐도 21억 이하라는 압도적인 숫자여서 바로 실패해버렸다. 그래서 그냥 손익분기점이 되는 지점 n을 line 7에 수식으로 정리했다. 이때 주의할 점은 n이 정수로 떨어질 수도 있고 소수로 나올 수 있는데, 정수라면 n에 +1을, 소수라면 올림을 해주면 된다.
예제 입력 1을 통해 쉽게 알 수 있는데, 노트북을 만약 10대 만들어서 팔았다면 다음과 같은 비용과 수익의 식이 나온다.
총비용 : 고정 비용 1,000만원 + 가변 비용 70만원 * 10대 = 1,700만원
총 수익 : 170만원 * 10대 = 1,700만원
n = a / (c - b) 라는 식을 통해 n = 10이라는 것을 확인한 것이다. 하지만 이는 총수입이 총비용보다 많아지게 되는 손익분기점(BREAK-EVEN POINT)은 아니라는 것이다. 여기서 한 대를 더 팔아야 총 수입이 총 비용보다 많아지게 된다.
소수도 마찬가지인데, 만약 위 예시에서 총비용은 동일하고 노트북 한 대당 150만원의 수익이 있다고 가정해보자.
n = a / (c - b) = 1000 / (150 - 70) = 12.5대
여기서 총수익과 총비용이 동일해지는 순간을 만들어주는 판매 대수는 12.5대이다. 하지만 노트북을 절반으로 쪼개버릴 수는 없다. 그렇다고 12대를 팔면 총수익이 총비용보다 적다. 그래서 13대를 파는 순간이 손익분기점인 것이다.
Source : https://www.acmicpc.net/problem/1712
'PS > 백준' 카테고리의 다른 글
[백준 알고리즘][파이썬/Python] 2581번: 소수 (0) | 2020.04.03 |
---|---|
[백준 알고리즘][파이썬/Python] 2839번: 설탕 배달 (0) | 2020.04.02 |
[백준 알고리즘][파이썬/Python] 2941번: 크로아티아 알파벳 (0) | 2020.03.31 |
[백준 알고리즘][파이썬/Python] 1065번: 한수 (0) | 2020.03.30 |
[백준 알고리즘][파이썬/Python] 4344번: 평균은 넘겠지 (0) | 2020.03.29 |