▶ BufferedReader, StringTokenizer를 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
입력 & 출력
나의 풀이
이번 문제는 주어진 비용과 수익을 이용하여 손익 분기점을 찾는 문제입니다.
문제를 보면 생산 대수를 늘려 가다 보면 어느 순간 총수입(판매비용)이 총비용(=고정비용+가변비용) 보다 많아지게 된다. 최초로 총수입이 총비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)을 찾는 것인데, 총 3개의 변수가 있습니다.
1. 고정 비용 A
2. 가변 비용 B
3. 상품 가격 C
여기서 중요한 것은 A인데 A는 " 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용" 입니다.
즉 몇 대를 생산하든지 A는 변하지 않는 불변 비용이고, 가변 비용 B는 생산 개수에 따라 비례하여 증가합니다.
코드를 설명하자면 먼저 빠른 입력을 위해서 BufferedReader 클래스를 사용해 줍니다. 그리고 손익분기점을 찾지 못하면 -1을 반환해야 하기 때문에 cnt를 -1로 초기화해 줍니다.
만약에 상품 가격 C가 가변비용보다 작으면 몇 개를 팔든지 절대 이익이 나지 않습니다. 따라서 C > B를 조건으로 넣어주고
while문을 사용하여 무한 반복해 줍니다.
생산 개수를 i로 초기화해 주고, 총비용 TC를 A + B * 생산개수로 하고, 판매 비용 sales를 C * 생산개수로 지정해 줍니다.
생산개수가 증가할 때마다 해당 연산을 해주는 데 sales가 TC보다 클 때 그 지점은 손익분기점입니다. 따라서 해당 지점에서 cnt에 생산개수 i를 저장해 주고 break를 통해 while문을 빠져나옵니다.
마지막으로 생산개수를 반환하여 마무리해 주었습니다.
refactoring ✅
총비용=총수익
즉, 𝐹 +𝑉×𝑥=𝑃×𝑥
여기서,
F는 고정 비용
V는 가변 비용
P는 판매 가격
x는 판매 대수
이를 손익분기점에 대한 방정식으로 풀면, 𝐹 = ( 𝑃−𝑉) X입니다.
따라서 다음과 같은 공식이 나옵니다.
이를 문제 변수에 맞게 풀이한다면 다음과 같습니다. 판매 대수를 x라고 한다면
(판매 개수 * 상품가격) = 고정 비용 + (가변 비용 * 판매 개수)
➡️ (판매 개수 * 상품가격) - (판매 개수 * 가변비용) = 고정 비용
➡️ 판매 개수 (상품 가격 - 고정 비용) = 고정 비용
➡️ 판매 개수 = 고정 비용 / (상품 가격 - 고정 비용)
따라서 (A/(C-B)는 본전이 되는 지점입니다. 여기에 1개를 더 팔면 손익분기점이기 때문에 (A/(C-B) + 1을 해주면 정답이 되는 것입니다.
10배가 넘는 속도 차이를 보이고 있습니다. 당연한 것인 게 처음 풀이는 while문과 if문이 많았지만 리팩터링 한 코드는 반복문 없이 공식으로 구했기 때문에 당연합니다.
참고 ❗
[JAVA] 입출력, BufferedReader, StringTokenizer
Java로 코딩테스트를 보거나 입력을 사용해야 할 때 Scanner 클래스를 사용하면 편리하지만 속도가 느리다는 단점이 있습니다. 그렇기 때문에 속도가 빠른 BufferReader 클래스를 사용을 하면 시간복
pixx.tistory.com
'Coding Test > 백준' 카테고리의 다른 글
[백준] 최대공약수와 최소공배수 (BufferedReader, StringTokenizer, 유클리드 호제법) (0) | 2024.05.25 |
---|---|
[백준] ACM 호텔 (BufferedReader, StringTokenizer, StringBuilder, 10250번, Java) (0) | 2024.05.24 |
[백준] 직사각형에서 탈출 (BufferedReader, 1085번, Java) (0) | 2024.05.24 |
[백준] 분해합 (BufferedReader, 2231번, 브루트 포스, Java) (0) | 2024.05.24 |
[백준] 달팽이는 올라가고싶다 (BufferedReader, StringTokenizer, Java) (0) | 2024.05.23 |