[백준] 1712번 손익분기점

뱅뱅의 텃밭·2022년 6월 24일
0

백준

목록 보기
8/14

문제:
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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 Bj_1712 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		
		if (b>=c) {
			System.out.println(-1);
		} else {
			System.out.println(a/(c-b)+1);
		}
		sc.close();
	}
}

손익분기점이 나오려면 b 보다 c 가 커야 하고, a인 초기비용이므로 한 개씩 더 생산했을때 수입은 c-b씩 증가해서 최초로 이익이 발생하는 판매량은 a/(c-b)+1로 계산해 줄 수 있다.

실수:
문제를 보고는 쉬운 문제라고 생각하고 쉽게 덤벼들었다. 단순하게 수학식을 세워보았다.
a + b*cnt < c*cnt 라는 식이 성립하는 cnt 값을 찾으면 된다고 생각했다.

if (b>=c) {
	System.out.println(-1);
} else {
	while(a+b*cnt >= c*cnt) {
		cnt++;
	}
	System.out.println(cnt);
}

첫 시도는 틀렸습니다..? 다시 차근차근 문제랑 코드를 보고서는 아 이게 a,b,c는 int형일 수 있지만 a+b*cnt를 계산했을때는 int형을 넘어가는 구나 하고 long형으로 수정해서 다시 제출 해보았다.
결과는 시간초과... 맞는데 왜 틀리지 생각이 들었다

다시 내가 세웠던 식을 쳐다보았다. a + b*cnt < c*cnt
흠... cnt가 중복해서 들어가니까 정리를 해보았다. a < (c-b)*cnt
그러고는 예제 입,출력을 보았더니 패턴이 보였다.
입력 1000 70 170 -> 출력 11 , 입력 2100000000 9 10 -> 출력 2100000001
그렇다 c-b를 계산한 것으로 a를 나누면 손익분기점을 아쉽게 넘기지 못한 판매량이 나오고 여기서 한 개만 더 만들면 손익분기점을 넘는 지점이 되는 것이었다.
다시 변수들을 int형으로 다 수정하고 코드도 간단하게 a/(c-b)+1 로 정리를 했더니 문제가 해결되었다.

문제를 항상 꼼꼼히 읽어서 힌트를 잘 얻어내고 예제부터 먼저 체크하고 입력할 수 있는 특이한 케이스까지 생각해서 문제를 잘 해결해 낼 수 있도록 더욱 노력해야겠다!

profile
나만의 텃밭을 가꾸어보자

0개의 댓글