이번에는 기본 수학 1에 관련된 문제에서 제목이 '손익분기점'으로 되어있는 문제를 풀었다. 정답률이 25%대이다.
https://www.acmicpc.net/problem/1712
바로 코딩에 들어가기 전, 수식을 구해보자.
고정 가격은 a
가변 가격은 b
물품 가격은 c
판매대수를 n이라고 한다면, 손익분기점에 관련된 식은 다음과 같다.
$$ a+b*n < c*n $$
이 부등호를 만족하는 n의 최솟값을 찾는 문제라고 보면 된다.
손익분기점이 존재하지 않는 경우부터 고려하자.
$$c -(a/n+b)>0$$
항상 부등호가 성립하지 않는 경우, 즉 좌변이 항상 0보다 작거나 같을 때 일 것이다. 그리고 n이 점점 커지면 커질수록 a/n은 0으로 수렴하게 되므로 결국
$$ c >b $$
가 된다. 그러니 손익분기점이 존재하기 위해선 물품 가격은 반드시 가변 가격보다 커야 한다는 결론이 나오게 된다.
손익분기점을 구해보자.
두 번째 수식을 판매대수에 관련하여 정리해보자.
$$n>a/(c-b)$$
따라서 이 부등호를 만족하는 n의 최솟값을 찾으면 된다. 여기서 한 발 더 나아가서 부등호식을 등호식으로 바꾸게 되면 식이 뜻하는 의미가 약간 달라진다. 바로 수익과 지출이 같아지는 n값이 구해진다.
$$n=a/(c-b)$$
판매대수 n은 반드시 자연수 이어야 하므로 소수점은 버림을 한다. 수익과 지출이 역전되는, 손익분기점을 지나는 것은 판매대수 결괏값에 1을 더함으로써 구할 수 있다.
이제 코딩해보자.
#값을 받아서 리스트에 저장한다.
receive_input = input().split()
#고정지출 선언
immutable_coast = int(receive_input[0])
#가변지출 선언
mutable_coast = int(receive_input[1])
#판매금액 선언
price = int(receive_input[2])
#이윤이 남기 시작하는 최소 판매대수
break_even_point = 0
#손익분기점이 존재하는 경우
if mutable_coast < price :
#이윤이 남기 시작하는 최소 판매대수에 관련한 식
break_even_point = (immutable_coast//(price - mutable_coast))+1
print(break_even_point)
#손익분기점이 존재하지 않는 경우
else:
print(-1)
다른 분들의 결과와 비교해도 비슷하게 나왔다. 간혹 시간과 메모리를 많이 사용하신 분이 있는데, 그 경우에는
$$ c-(a/n+b)>0 $$ 을 만족하는 n을 반복문으로 구할 때 발생한다. 원하는 결괏값을 중심으로 식을 최대한 정리해서 코딩하도록 하자.
'Study > 백준코테' 카테고리의 다른 글
6. 백준 코딩테스트 2839번 문제 python (0) | 2021.09.23 |
---|---|
5. 백준 코딩테스트 2869번 문제 python (0) | 2021.09.18 |
3. 백준 코딩테스트 1157번 문제 python (0) | 2021.09.15 |
2. 백준 코딩테스트 4344번 문제 python (0) | 2021.09.13 |
1. 백준 코딩테스트 10818번 문제 python (0) | 2021.09.12 |