본문 바로가기

문제풀기/백준 문제풀이

[백준 문제 1712번] 손익분기점 문제

728x90
반응형

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

 

1712번: 손익분기점

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

www.acmicpc.net

 

문제 1712) 손익분기점 문제
문제)
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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을 출력한다.

 

NO 예제 입력 예제 출력
1 1000  70  170 11
2 3  2  1 -1
3 2100000000  9  10 2100000001

 

 

정답 코드)

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		
		int n = 0;
        
		if( c != b ){
			n = a / (c-b) + 1;
		} else {
			n = -1;
		}
        
		if(b > c) {
			System.out.println(-1);
		} else {
			System.out.println(n);
		}
	}
}


1. 변수를 3개 입력 받고 출력할 변수를 하나 더 지정해줍니다.
2. 만약 c가 b랑 같지 않으면 n의 값을 위의 식과 같이 코드를 생성합니다.
 → a + bn < cn이 되어야하므로 n의 값에서 무조건 1이 더해져야 합니다.
3. b가 c보다 크면 n의 값이 나올 수 없기 때문에 -1을 출력하고 그 외에는 n을 출력하도록 합니다.

 

이 문제를 푸는데 며칠이 걸렸습니다. 그 이유는 시간은 0.35초 만에 출력이 되어야하는데 저는 증감식으로 밖에 풀 수 없다고 생각했기 때문입니다. 그래서 시간초과 오류가 많이 나타났습니다.

 

위의 방법처럼 바로 n의 값을 변수로 대입해 n+1의 값을 출력하게 하면 원하는 값을 구할 수 있습니다.

 

위의 코드에서도 b >= c이면 -1을 출력하도록하고 그 외에는 n 값을 출력하도록 만들면 코드가 더 간단해지겠어요!!

 

계속해서 문제 풀어볼게요~

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형