본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 1712번 : 손익분기점

by hyunipad 2021. 6. 13.
반응형

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

 

1712번: 손익분기점

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

www.acmicpc.net

이번 포스팅은 1712번 손익분기점입니다.

세가지의 수 A, B, C를 입력합니다.

  • A = 고정 비용
  • B = 가변 비용(1대당 발생하는 비용)
  • C = 판매 가격

이때 비용보다 수입(판매가격)이 많아질때의 판매량을 구하는 문제입니다.

이번 문제에는 두가지의 포인트가 있습니다. 첫번째는 손익분기점이 존재하지 않는 경우를 생각하는 것입니다.

손익분기점이 존재하지 않는다는 것은 판매를 할수록 손해가 나는것입니다.

예제 1번을 예를 들면,

1대 판매 했을 때 => 170(c) - 1000(a) - 70(b) = -900

2대 판매 했을 때 => 340(2c) - 1000(a) - 140(2b) = -800 입니다.

판매량이 올라갈수록 이익이 +100만큼 되고있습니다. 이 100은 판매량에 따라 변하는 C와 B의 값에 따라 정해집니다.

실제로

1대 판매 => 170(c) - 70(b) = 100

2대 판매 => 340(2c) - 140(2b) = 200 입니다.

따라서 C > B 라면 손익분기점이 발생하고, B >= C 면 손익분기점이 존재하지 않습니다.

두번째 포인트는 시간 초과입니다.  A, B, C는 21억이하의 자연수(int) 이기 때문에 예제 3번을 2100000000을 계산하게 되면 시간이 오래 걸려 시간 초과가 발생합니다. (실제로 시간 초과가 발생해서 수정을 했었습니다.)

따라서 손익분기점을 구하기 위해 whilte문을 돌릴 때 계산식을 정리하여 조건을 넣어줘야 합니다.

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		StringTokenizer st = new StringTokenizer(br.readLine());
		int a = Integer.parseInt(st.nextToken()); // 고정 비용
		int b = Integer.parseInt(st.nextToken()); // 가변 비용
		int c = Integer.parseInt(st.nextToken()); // 판매 가격
		int count = 1; // 판매량

		if(b >= c) { // 판매할수록 손해가 나면 손익분기점 X
			count = -1;
		}else {
			while (a + (b - c) * count >= 0) { // a+b*count >= c*count를 정리 
            // 수입이 비용을 넘으면 반복문 종료
				count++;
			}
		}

		bw.write(String.valueOf(count));

		br.close();
		bw.flush();
		bw.close();
	}
}

 

반응형

댓글