https://www.acmicpc.net/problem/1712
1712번: 손익분기점
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와
www.acmicpc.net
문제
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a = br.readLine();
String[] b = a.split(" ");
long fix = Integer.parseInt(b[0]);
long var = Integer.parseInt(b[1]);
long price = Integer.parseInt(b[2]);
long k = 0;
if(var<price) {
System.out.println(fix/(price-var)+1);
}
else
System.out.println(-1);
}
}
- 위의 코드를 실행했을 때 런타임 에러 (ArrayIndexOutOfBounds) 발생
아래 코드로 수정 후 에러가 사라졌다.
해결 방법
- 처음엔 for문을 사용해서 고정비용(fix)+가변비용(var)*i이 총수입(price*i)을 넘어설 때의 i값을 print 하려고 했지만 시간초과로 불가능했다. 문제에서는 for문 이외의 방법을 유도했다. 21억 이하의 자연수가 들어가야 하므로 계산 결과는 int 자료형을 초과할 수 있으므로 long을 사용했다. 고정비용을 가격-가변비용으로 나눈 뒤 1을 더한다. 나머지는 버리는 나눗셈 연산은 손익분기점과 같거나 작은 수량으로 나타나기 때문이다. 예외처리는 가변비용이 가격보다 높을 경우 -1을 출력하도록 했다.
어려웠던 점 / 고쳐야할 점
- 수학적인 사고력 필요.
반응형
'알고리즘 문제 풀이 (Problem Solving)' 카테고리의 다른 글
[Problem Solving/Java] 백준 4948번 - 베르트랑 공준 (2) | 2024.01.02 |
---|---|
[Problem Solving/Java] 백준 1929번 - 소수 구하기 (0) | 2024.01.02 |
[Problem Solving/Java] 백준 2581번 - 소수 (0) | 2023.08.30 |
[Problem Solving/Java] 백준 1978번 - 소수 찾기 (0) | 2023.08.30 |
[Problem Solving/Java] 백준 1316번 - 그룹 단어 체커 (0) | 2022.04.07 |