문제
월드전자는 노트북을 제조하고 판매하는 회사이다.
노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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을 출력한다.
코드
#백준 1712
value = list(map(int, input().split()))
if value[1] >= value[2]:
print(-1)
else:
cnt = int(value[0]/(value[2]-value[1])+1)
print(cnt)
코드를 간단하게 만드는 것에 도움이 많이 된 문제라 생각합니다.
출력이 일치한 코드를 만들어 제출했더니 '시간 초과'로 인해 통과하지 못했어요 ㅠ.
저의 처리 과정이 답안이 요구하는 과정보다 오래 걸리고 복잡하기 때문이었겠죠?
시간 초과가 된 코드는 "A(고정비용) + B(가변비용) x 판매대수" 값과
"C(판매 가격) x 판매대수" 값을 따로 구하여 손익분기점이 발생하는 지점의 판매대수 값을 구했습니다.
위에처럼 만들다 보니 판매대수에 대한 값이 정확하지 않아 반복문을 사용하여 값을 구했습니다.
이게 시간 초과의 원인이었던 것입니다.
문제의 핵심은 "C x D(판매대수) > A + B x D"가 성립할 때 손익분기점이 발생한다는 것입니다.
해당 식을 이항의 과정을 거치면
" CD - BD > A" -> "(C-B)D > A"의 식이 성립하며 "D > A/(C-B)"에 도달합니다.
이익이 발생하기 위한 D의 값은 '고정비용/(판매 가격-가변비용)'의 값보다 크면 됩니다.
문제에 제시된 값으로 결과를 구해보겠습니다.
A = 1000, B = 70, C = 170
D > 1000/(170-70) -> D > 10
D(판매대수)의 값이 11이면 손익분기점이 발생한다는 의미입니다.
따라서 출력 결과는 11이 나오게 됩니다.
예시처럼 값이 딱 맞게 떨어지는 경우나, 나누기 결과로 소수점이 등장하는 경우가 있습니다.
하지만 무엇이든지 나타난 정수 값보다 1만 크다면 손익분기점이 됩니다.
크거나 같다 (>=)가 아닌 크다(>)이기 때문입니다.
손익분기점이 나타나지 않는다는 의미는 많이 판매를 해도 손해가 되는 값이라는 뜻입니다.
그 이유는 만들면서 발생한 비용인 가변비용이 판매비용보다 클 경우 발생합니다.
B = 120, C = 70이라고 가정한다면
1000/(70-120) = 1000/-50 = -20. 음수가 등장하면서 손해가 발생하는 것입니다.
B와 C의 값이 같으면 결과는 0이기 때문에 이익이라고 판단할 수 없어서 출력은 -1로 통합합니다.
-끝-
'작업 > Problem Solving' 카테고리의 다른 글
백준 1193(분수찾기) 파이썬(python) 해결 (0) | 2020.08.20 |
---|---|
백준 2839(설탕 배달) 파이썬(python) 해결 (0) | 2020.08.18 |
백준 1316(그룹 단어 체커) 파이썬(python) 해결 (0) | 2020.08.15 |
백준 2941(크로아티아 알파벳) 파이썬(python) 해결 (0) | 2020.08.06 |
백준 1157(단어 공부) 파이썬(python) 해결 (0) | 2020.08.03 |