Blog blog = new Korea()

알고리즘

[백준] 1712 손익분기점 (Java)

newkr 2022. 8. 9. 13:45
728x90

꽤나 쉬운 문제다. 문제를 보면 알다시피 순이익을 구하고, 순이익이 고정비용을 넘겼을 때 손익분기점이 온 것이라 판단하면 된다. 그리고 손익분기점이 오기 까지의 물건 판매 수를 구하면 되는 문제이다.

처음에는 물건을 계속 팔아서 손익분기점을 넘긴다는 방식으로 생각해서 반복문인 while을 사용했었다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 백준 1712 _ 손익분기점

        // 입력변수
        Scanner sc = new Scanner(System.in);
        int A = sc.nextInt(); // 고정 비용
        int B = sc.nextInt(); // 가변 비용
        int C = sc.nextInt(); // 노트북 판매 가격

        int count = 1; // 노트북 판매 대수
        int profit = C - B; // 순이익

        if(profit > 0) { // 순이익이 0보다 클 때
            while(A >= profit) { // 순이익이 고정비용을 넘길 때까지 반복
                count++; // 판매 대수 증가
                profit += C - B; // 순이익 증가
            }
        } else {
            count = -1;
        }

        System.out.println(count);
    }
}

이상 없이 작동했지만, 반복문을 사용한 탓에 런타임이 오래 걸렸다. 그래서 그냥 고정비용을 순이익으로 나눈 후 1을 더했더니 런타임이 확 줄어들기는 했다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 백준 1712 _ 손익분기점

        // 입력변수
        Scanner sc = new Scanner(System.in);
        int A = sc.nextInt(); // 고정 비용
        int B = sc.nextInt(); // 가변 비용
        int C = sc.nextInt(); // 노트북 가격

        int profit = C - B; // 노트북 가격 - 가변 비용 즉, 순이익

        if(profit <= 0) { // 순이익이 0보다 작거나 같으면 의미가 없음
            System.out.println("-1");
        } else {
            System.out.println(A/profit + 1);
        }
    }
}

 

728x90