(Java) 백준 1712번 손익분기점

코딩너구리·2026년 1월 25일

코딩 문제 풀이

목록 보기
181/266

https://www.acmicpc.net/problem/1712

문제

> 월드전자는 노트북을 제조하고 판매하는 회사이다. 
> 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며,
한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.

> 예를 들어 A=1,000, B=70이라고 하자. 
> 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 
열 대 생산하는 데는 총 1,700만원이 든다.

> 노트북 가격이 C만원으로 책정되었다고 한다. 
> 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다.
> 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.

> A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.

접근

노트북 한대를 만드는데 드는 비용은 A + B x 1 이고, 판매가격은 C x 1이다. 그럼 n대를 생산할 땐 A + B x n, C x n이 된다.
이 떄 이떄, 이득이 되려면 C x n이 더 커야한다. 즉, 수식을 정리하면 (C-B) x n > A가 된다. 즉 n은 A / (C-B)가 되는데 우변이 실수 일 때를 고려해 +1을 해줘야 한다.
ex)3.3122..라면 int형은 3이라고 나오기 때문에 4대를 만들어야 이득임
따라서 A/(C-B)+1을 구해주면 된다.
근데 C-B가 0이면 분모가 0으로 성립 될 수 없고, C-B가 음수값이면 -대를 만들 수 없기 때문에 C-B <= 0면 -1을 출력, 아니면 식을 계산한 값을 출력해준다.

문제해결

> 세 수를 입력받고 손익분기점을 계산하는 메소드에 B와 C를 인자로 넣어 호출한다.
> B와 C가 같으면 -1을 반환하고, 식을 계산해 C-B에 대해 음수면 전체식에 -를 곱하고 아니면 그대로 계산한다.
> 나온 값이 0보다 크면 출력하고 아니면 -1을 출력한다.

코드

import java.io.*;
import java.util.*;
import java.lang.*;

public class Main
{
    //1712번 손익분기점
    static int A, B, C;
    static int calc(int b, int c)
    {
        if(b == c) return -1;
        int rst = b > c ? -A / (b-c) + 1 : A / (c-b) + 1;
        return rst > 0 ? rst : -1;
    }
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        A = Integer.parseInt(st.nextToken());
        B = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());

        System.out.print(calc(B,C));
    }
}

후기

생각은 맞지만 너무 나아가 오히려 어렵게 풀었다. 굳이 계산까지 안가고 C-B가 음수면 n이 음수가 나올 수 밖에 없기 때문에 그냥 -1을 출력하면 되는데 이 때도 rst를 계산해줘야 하기 때문에 효율이 떨어지고 낭비가 된다.
결론적으로 메소드까지도 안가고 그냥 C-B가 <= 0면 -1출력, 아니면 A/(C-B)+1출력 해주면 된다.

0개의 댓글