-
[백준] 1712번: 손익분기점코딩(Coding)/백준 문제풀이 2020. 12. 22. 13:49728x90
백준 알고리즘: 1712번: 손익분기점
손익분기점
문제
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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을 출력한다.
해당 문제는 아래 코드 처럼 단순하게(Brute-force?) 접근한다면 시간초과가 난다.
예를들어 A=21억 B=1 C=2라고 할때, 당연히 아래 코드에선 시간초과가 나타난다.
import sys a,b,c = sys.stdin.readline().split() a = int(a) b = int(b) c = int(c) def calc(a, b, c): i = 0 while(True): totalIncome = a + (i*b) totalCost = i * c if(totalCost >= totalIncome): return i+1 i += 1 print(calc(a,b,c))
따라서 해당 문제는 단순 반복을 통해 푸는것이 아니라 뭔가 수학적인 것이 첨가가 되어야 한다.
우선 b가 c보다 크다면 손익분기점이 나타날수 없으므로 예외처리를 해준다.
그리고 간단하게 C-B의 값을 A와 나눈값에 +1 해주어 몇번째에 최초로 이득이 생기는지 구할 수 있다.
import sys a,b,c = sys.stdin.readline().split() a = int(a) b = int(b) c = int(c) def calc(a, b, c): if(b>=c): return -1 return int(a/(c-b) + 1) print(calc(a,b,c))
해당 문제는 어떻게 접근할 것인지에 대해 묻는것 같다. 확실히 아래 코드가 위에코드보다 가독성이 뛰어나다.
728x90'코딩(Coding) > 백준 문제풀이' 카테고리의 다른 글
[백준] 10174번: 팰린드롬 (0) 2020.12.29 [백준] 1037번: 약수 (0) 2020.12.28 [백준] 17608번: 막대기 (0) 2020.12.24 [백준] 8958번: OX퀴즈 (0) 2020.12.24 [백준] 4673번: 셀프 넘버 (0) 2020.12.23