본문 바로가기

Algorithm

백준 1712 손익분기점 Java

단계별로 풀어보기의 수학 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에 있는 달팽이는 올라가고 싶다 문제도 비슷한 방식으로 풀 수 있었다.