본문 바로가기
DEV/백준 알고리즘

백준 알고리즘 1712번(파이썬)

by 올커 2022. 10. 13.

 

백준 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. 리뷰

 - 손익분기점 개념을 잘 이해하고, 풀이 알고리즘을 짤 수 있는 식을 만드는 것이 첫째이다.

 - 예외가 나올 수 있는 환경을 잘 따져보고 예외조건을 줄 것인지 판단하는 것이 둘째이다.

반응형

댓글