본문 바로가기
Algorithm/백준

[Java][백준] 1712번 손익분기점

by jisu-jeong0 2023. 11. 20.
 

1712번: 손익분기점

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

www.acmicpc.net


아이디어

1. A는 고정 비용, B는 가변 비용, C는 수입이다(B, C는 노트북 한 대당 발생)

2. 손익분기점을 넘을 때(총 수입 > 고정 비용 + 가변 비용) 출력

3. split(" ")해서 A, B, C를 각각 저장하자! -> 생각보다 과정이 복잡하다 -> StringTokenizer로 변경

4. 손익분기점이 없으면 -1을 출력해야 한다.

  • 손익분기점이 없다?
  • 아무리 팔아도 비용보다 수입이 더 많아지지 않는다는 의미
  • 가변 비용이 수입보다 크거나 같으면 항상 손익분기점이 없음! (B >= C)

 

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

class BJ_1712 {
    public static void main(String[] args) throws IOException {
        // A 매년 발생하는 고정비용
        // B 노트북 한 대당 발생 비용
        // C 노트북 가격
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bufferedReader.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        
        // 지출 : a+bi  
        // 수익: ci
        // a+bi < ci 될 때 i 개수 출력
        // 손익분기점 없으면 -1 출력
        int i = 0;
        while (true) {
            if (a+(b*i) < c*i) { 
                break; 
            } else if ((b) >= (c)) {
                i = -1;
                break;
            }
            i++;
        }
        System.out.println(i);

    }
    
}

 

이렇게 작성했는데 계속 틀려서...

 

구글링을 조금 했다. 찾아보니 다들 반복문이 아니라 조건문 한 줄로 해결하고 있었다(혼자 풀어보려고 자세히는 안 봤음)

성능 상으로도 반복문을 계속 수행하는 것보다는 한 줄로 해결하는 게 더 좋을 것 같다.

괜히 정답 비율 28%가 아니다

 

아이디어2

예시를 보자.  A = 1000, B = 70, C = 170일 때

 

노트북 한 대를 판다.

170 - (  1000 + 70 ) = - 900 

두 대를 판다.

170 - ( 900 + 70 ) = -  800

.

.

.

170 - ( 100 + 70 ) = 0

170 - ( 0 + 70 )= 100

 

10개째에서 수입과 비용이 같아지고, 11째에서 손익분기점이 발생한다.

 

CN - ( A + BN ) = 0

A = CN - BN = N( C - B )

N = A / ( C - B )

 

N = A / ( C - B )

손익분기점을 넘어야 하므로 +1

 

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

class BJ_1712 {
    public static void main(String[] args) throws IOException {
        // A 매년 발생하는 고정비용
        // B 노트북 한 대당 발생 비용
        // C 노트북 가격
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bufferedReader.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        
        // 지출 : a+bi  
        // 수익: ci
        // a+bi < ci 될 때 i 개수 출력
        // 손익분기점 없으면 -1 출력
        int i;
        if ( b >= c ) {
            i = -1;
        } else {
            i = (a)/(c-b) + 1;
        } 
        System.out.println(i);

    }
    
}

 

간단하게 풀 수 있었다.

 

 

 

 

 

'Algorithm > 백준' 카테고리의 다른 글

[Java][백준] 8911번 거북이  (2) 2023.12.01
[Java][백준] 1459번 걷기  (0) 2023.11.29
[Java][백준] 8595번 히든 넘버  (0) 2023.11.14
[Java][백준] 2839번 설탕 배달  (1) 2023.11.14
[Java][백준] 1904번 01타일  (1) 2023.11.14