문제는 다음과 같다.
https://www.acmicpc.net/problem/1712
우선 여기서 주목해야할 세가지가 존재한다.
A : 고정비용
B : 노트북 생산 비용
C : 노트북 판매 비용
아마 필자를 포함한 대부분의 사람들이 처음에는 반복문을 통한 해결방법을 생각했을 것이라 생각한다. 하지만 잘 생각해 보면 이 문제는 반복분에 의한 시간복잡도 O(n)이 아닌 단순 논리판단에 의한 시간복잡도 O(1)로 문제를 해결할 수 있다.
손익분기점은 판매 총 수익이 생산 비용보다 많아지게 되는 첫 순간을 의미한다.
결론적으로 변수로 수식을 표현하면 다음과 같다.
A + (B * count) < C * count
하나를 주목해 보자면, 변수 B와 C는 모두 카운트 변수인 count에 의해서 영향을 받고 있다. B가 곱해지는 만큼 C도 곱해진다는 소리이다. A를 제외하고, B와 C의 변수만 놓고 봤을때 (B * count) < C * count 당연히 C의 값이 더 커야 해당 논리가 성립됨을 알 수 있다.
즉 출력의 마지막 부분인 '손익 분기점이 존재하지 않으면 -1을 출력한다' 부분을 B값이 C보다 크거나 같은 경우로 조건을 결론낼 수 있다.( if B >= C: print('-1'))
C - B를 하면 가변적인 값은 판매 수익만 남게 되는것이다. 그러면 생산 비용에는 고정비용인 A만 남게 되는것이다. 손익분기점이 되는 노트북 판매 수를 구하기 위해서는 고정비용 A에서 C-B한 값을 나눠준 후(최대 공약수) + 1 을 해주면 된다.
코드는 아래와 같다.
'CS 지식 > Algorithm-Problem Solving 정리' 카테고리의 다른 글
[구름]계단 오르기 (0) | 2022.01.03 |
---|---|
11653번: 소인수 분해, 나의 잘못된 접근법과 내가 놓친부분 (0) | 2021.01.10 |
BOJ 1929 소수 구하기 Python3 (0) | 2020.02.09 |
BOJ 11728 배열합치기 Python3 (0) | 2020.02.09 |
BOJ 1978 소수찾기 Python3 (0) | 2020.02.09 |