단계별로 풀어보기의 수학 1에서 만난 손익분기점 문제이다.
쉬워 보이는 문제였는데 정답률은 29%로 낮다.
단계별에 있어서 앞으로 더 많은 사람들이 풀고 정답률은 더 낮아질 것 같다.
노트북을 생산하기 위해 필요한 고정비용 A와 가변비용 B, 노트북 가격 C가 주어진다.
고정비용은 말 그대로 변하지 않는 비용이고 가변비용은 한대 생산당 드는 비용이다.
노트북을 N개 생산할 때
A+B*N보다 C*N이 더 커지는 시점이 손익분기점이다. 이때 N의 개수를 출력하면 되는 문제이다.
손익분기점이 존재하지 않으면 -1을 출력해야 하는데
손익분기점이 존재하지 않는 경우는
B보다 C가 작거나 같을 때 이다.
B >= C 인 경우엔
몇 대를 팔아도 손익분기점을 넘길 수 없다.
처음엔 쉽게 쉽게 while문으로 1씩 증가하며 손익분기점을 넘는 N을 찾는 코드를 작성했는데
문제를 보면 시간제한이 0.35초이고 A, B, C의 제한이 21억 이하이다.
때문에 while문으로는 문제를 풀 수 없었다.
좀 더 생각해보면 고정비용인 A는 어차피 변하지 않고
노트북 가격 C와 가변비용 B의 차이에 따른 N의 개수를 찾는 것이기 때문에
나누기 연산으로 해결이 가능한 문제였다.
한대당 얻어지는 순수익은 (노트북 가격 C) - (가변비용 B)이다.
그렇기 때문에 A / (C - B)를 통해 손익분기점을 넘지 않는 최대 노트북 개수를 찾을 수 있다.
문제의 내용은 손익분기점을 넘는 것이기 때문에 여기에 +1을 해줌으로써 해결할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
|
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(reader.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
if(b >= c) {
System.out.println(-1);
} else {
System.out.println(a/(c-b)+1);
}
}
|
수학 1에 있는 달팽이는 올라가고 싶다 문제도 비슷한 방식으로 풀 수 있었다.
'Algorithm' 카테고리의 다른 글
백준 14889 스타트와 링크 Java (0) | 2019.08.05 |
---|---|
백준 2231 분해합 Java (6) | 2019.07.29 |
백준 6549 히스토그램에서 가장 큰 직사각형 Java (0) | 2019.07.11 |
백준 3111 검열 Java (0) | 2019.07.11 |
백준 9935 문자열 폭발 Java (0) | 2019.07.10 |