https://www.acmicpc.net/problem/1712
손익분기점을 구하는 프로그램. 손익분기점에 대해 잘 모른다면, 문제를 이해하는게 조금은 어려울 수도 있겠다싶다.
다행히 나는 회계학을 복수전공해서 쉽게 이해...
손익분기점이란 말 그대로 손익이 아는 시점이라고 보면 된다.
문제를 보면 변수가 주어지는데,
1. 고정 비용(불변)
2. 가변 비용
3. 상품 가격
1번의 경우는 몇 대를 생산하던지 변하지 않는 값이다.
즉, 문제에서 요구하는건 n 개를 생산 할때 발생하는 이익의 시점의 n이 무엇인지?
식으로 보면
n x (3. 상품가격) > 1. 고정비용 + (n x 2.가변비용) 으로 볼 수 있다.
보기 쉽게 알파벳을 대입해보면 n x 상품가격(C) > 고정비용(A) + (n x 가변비용(B))
n x C가 곧 최종적인 수익이라 볼 수 있음. 이 값이 A + (n x B) 값을 넘어설때가 바로 손익분기점!
n에 대하여 식을 정리해 보면 nC > A + nB
n(C-B) > A
n > A / (C-B)
단, 이 부분은 비용과 식이 같아지는 부분일뿐 이익이 나는건 아니다. 이익이 나려면 n 값에 1을 추가해주기!
다시 수식으로 해보면
n > A / ( C-B) + 1
어 근데 문제에서 손익분기점이 존재하지 않으면 -1을 출력하라고 한다.
이익이 발생되지 않으려면
A / (C-B) + 1 > 0 이 이익이 발생되는 상황이니 계산된값이 0이거나 0보다 작아야 할것이다.
근데 A, B, C는 모두 자연수 값이고, 게다가 A는 변하지 않는 불변값.
그렇다면? C - B 가 음수가 된다면, 이익이 발생되지 않겠구나! C - B < 0
만약 C와 B가 서로 같다면? 분모는 0이 되어서 식이 나올 수가 없을텐데?
여기서 약간 미분의 지식이 필요하다. C와 B가 0에 가까워 질 수록 식은 무한대에 가까워지고, 0이 되면 n 또한 무한대로 손익분익이 발생하지 않게 된다. 그렇기때문에 식을 다시 정리하자면 C - B <= 0
C <= B가 최종적으로 구하는식이 될 수 있겠다.
import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
/*Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int C = sc.nextInt();
if(C <= B) {
System.out.println("-1");
} else {
System.out.println((A/(C-B)) + 1);
}*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken()); //고정 비용(불변)
int B = Integer.parseInt(st.nextToken()); //가변 비용
int C = Integer.parseInt(st.nextToken()); //상품 비용
if (C <= B) {
System.out.println("-1");
} else {
System.out.println((A/(C-B))+1);
}
}
}
사실 문제의 맥락만 잘 파악했다면, 입출력 관련 어려운 문제는 아닌데,
손익분기점에 대한 개념. 그리고 미분의 개념을 사알짝 알아야 풀 수 있는 문제이지 않나싶다.
워밍업으로 Scanner로 풀어봤는데, Buffer의 성능이 워낙 좋으니 따로 비교는 하지 않겠음!
'Algorithm' 카테고리의 다른 글
[Java] 백준 14928번 큰 수(BIG) (2) | 2021.12.02 |
---|---|
[Java] 백준 2420번 (0) | 2021.11.04 |
[Java] 백준 1297번 TV 크기 (0) | 2021.11.03 |
[Java] 백준 5554번 심부름 가는 길 (0) | 2021.11.02 |
[Java] 백준 3046번 R2 (0) | 2021.11.02 |