📟java/백준

백준 1712 자바

하얀성 2022. 11. 13. 12:22

문제

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

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

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

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

입력

첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.

출력

첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.

 


<작성 답안>

import java.util.Scanner;
 
public class Main {
 
public static void main(String[] args) {
 
Scanner s = new Scanner(System.in);
        
int A = s.nextInt();
int B = s.nextInt();
int C = s.nextInt();

int x = A/(C-B); // 총이익은 0인 구간이 손익분기점 판매량 x이다.
System.out.println(x <= 0 ? -1 : x+1); -
}
}

 

런타임 에러가 난다.ㅎㅎ;

 한 때 회계 공부한 사람으로서 이 공식을 까먹은게 약간은 수치스러웠다.


<정답>

 

import java.util.Scanner;
 
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
 
 
int A = in.nextInt(); // 불변 비용
int B = in.nextInt(); // 가변 비용
int C = in.nextInt();  // 상품 가격
        
if (C <= B) {
System.out.println("-1");

else {
System.out.println((A/(C-B))+1);
}
}
}

 

만약에 C 와 B 의 값이 같다면 어떻게 되는가?

 

C 와 B 가 같다면 분모는 0이 되어 나눌 수 없는 식이 된다.

 

좀 더 구체적으로 보자면 미분을 할 줄 안다면 알겠지만

C 와 B 가 0에 가까워 질수록 식은 무한대에 가까워 진다. 즉, 0이게 되면 n 또한 무한대로 손익분기점이 발생하지 않게 된다.

 

그렇기에 이익이 발생하지 않는 경우를 수식으로 보자면 다음과 같다.

 

그리고 위 수식을 더 간단히 하자면 결과적으로는 다음과 같다.

 

 

 

즉, 우리는 두 가지 케이스에 따라 다르게 출력하면 된다.

 

입력받은 자연수 C 와 B 가 C  B 를 만족한다면 '이익이 발생하지 않는 조건'이므로 -1 을 출력하면 되고,

이 외에는 ( A / ( C - B ) ) + 1 의 연산 값을 출력해주면 된다.


<수정 보완>

 

->런타임 에러가 나는 이유는 int형이 안나오는 때가 있는데, x변수를 int형으로 선언했기 때문이다. 정답처럼 x변수 선언없이 가야한다.

-> 숫자를 그대로 출력해줄 때는 " " 기호 안에 넣어서 출력해야 한다. 

 

정답, 풀이 출처 : https://st-lab.tistory.com/71