백준 1712번_파이썬 알고리즘
Q. 백준 1712. 손익분기점
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.
노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.
(1) 입력 : 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다
(2) 출력 : 첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.
입력 예시 | 출력 예시 |
1000 70 170 | 11 |
3 2 1 | -1 |
2100000000 9 10 | 2100000001 |
A. 풀이
- 손익분기점(BEP)를 찾아내는 문제이다.
- 입력으로 주어진 변수는 고정비, 가변기, 그리고 판매단가이며, 이를 이용하여 판매단가를 구한다. 식은 아래와 같다.
고정비(a) + 가변비(b) × 판매대수(x) <= 판매단가(c) × 판매대수(x)
- 구하려는 변수 판매대수(x)에 대해서 식을 이항하여 다시 정리하면 아래와 같다.
→ x = a / ( c - b )
- 손익 분기점을 지나 최초로 수익이 발생했을 경우 이므로 위의 식에서 1을 더한 값을 x로 잡는다.
- 손익분기점이 구해지지 않는 경우에는 -1을 반환하도록 조건문(if)과 예외조건(exception)을 준다.
# Q 백준 1712. 손익분기점
# a(고정비) + b(가변비) * x(판매대수) <= c(판매단가) * x
a, b, c = map(int, input().split())
try:
x = a / (c - b) +1
if x >= 0:
print(int(x))
else:
print(-1)
except ZeroDivisionError:
print(-1)
1) 변수 선언부
- 입력받을 변수 고정비, 가변기, 그리고 판매단가를 받기 위해 map(int, input().split())구문을 사용하였다.
※ Tip(1) : map(옵션, 리스트) - 각 리스트의 요소에 '옵션'의 속성을 적용한다. (이 식에서는 int조건을 할당)
input().split()을 통해 공백으로 띄워진 값을 구분하여 각 변수에 담는다.
2) try, except문
- x를 x = a / ( c - b ) + 1 으로 정의한다. 만약 x값이 영보다 클 경우 x의 계산값을 정수로 반환한다.(print(int(x)))
- x가 음수로 나올 경우, 손익분기점이 발생하지 않는 경우기이 때문에 -1을 print(-1)을 통해 반환한다.
- try문에서 예외가 나올 수 있는 경우는 판매단가와 가변비가 동일한 경우(c = b)이다. 이 때 고정비 a를 0으로 나누는 경우가 발생하기 때문에 ZeroDivisionError는 -1을 출력할 수 있도록 print(-1)을 사용하여 반환한다.
R. 리뷰
- 손익분기점 개념을 잘 이해하고, 풀이 알고리즘을 짤 수 있는 식을 만드는 것이 첫째이다.
- 예외가 나올 수 있는 환경을 잘 따져보고 예외조건을 줄 것인지 판단하는 것이 둘째이다.
'DEV > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 2869번(파이썬) (1) | 2022.10.15 |
---|---|
백준 알고리즘 2292번(파이썬) (0) | 2022.10.14 |
백준 알고리즘 1316번(파이썬) (0) | 2022.10.12 |
백준 알고리즘 2941번(파이썬) (0) | 2022.10.11 |
백준 알고리즘 5622번(파이썬) (0) | 2022.10.10 |
댓글