https://www.acmicpc.net/problem/1712
문제
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.
예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만 원이 들며, 열 대 생산하는 데는 총 1,700만 원이 든다.
노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총수입(판매비용)이 총비용(=고정비용+가변비용) 보다 많아지게 된다. 최초로 총수입이 총비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.
A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.
풀이
손익분기점을 구하는 문제이다.
처음에는 반복문을 돌려서 손익분기점을 구했는데, 시간초과가 발생했다.
해결 방법을 찾지 못해 구글링을 해보았는데, 정말 수학문제였다.
이 문제는 위 식의 N을 구하면 되는 문제였고, 이 식을 정리하면 아래와 같다.
이제 위 부등식을 만족하는 가장 작은 N을 구하는 문제가 되었다.
이를 구하는 방법은 생각보다 간단하다.
정수 계산에서 A / (C - B)를 하면 결과로 몫이 나온다. (나머지는 버려진다.)
따라서 이 결과에 1만 더해준다면, 위 부등식을 만족하는 가장 작은 N이 될 것이다.
🔔 자세한 코드 설명은 더보기 란에 작성하였습니다.
*변수 생성 과정은 생략하였다.
1. 가변 비용이 판매 비용보다 크거나 같은 경우, 이득을 볼 수 없기 때문에 손익분기점을 구할 수 없다.
if(var >= price) System.out.println(-1);
2. 그렇지 않다면 위 풀이에서 구한 식의 계산 결과를 출력한다.
else System.out.println(fix / (price - var) + 1);
코드
BufferedReader 클래스를 이용한 코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int fix = Integer.parseInt(st.nextToken());
int var = Integer.parseInt(st.nextToken());
int price = Integer.parseInt(st.nextToken());
if(var >= price) System.out.println(-1);
else System.out.println(fix / (price - var) + 1);
}
}
틀린 부분이 있다면 정정해 주시면 감사하겠습니다.
궁금한 부분이 있거나, 다른 아이디어가 있으시면 자유롭게 댓글 남겨주세요!
'[JAVA]백준 알고리즘 > 단계별 - 기본 수학 1' 카테고리의 다른 글
[JAVA]백준 알고리즘 2775번 : 부녀회장이 될테야 (2) | 2023.02.03 |
---|---|
[JAVA]백준 알고리즘 10250번 : ACM 호텔 (0) | 2023.02.02 |
[JAVA]백준 알고리즘 2869번 : 달팽이는 올라가고 싶다 (0) | 2023.01.28 |
[JAVA]백준 알고리즘 1193번 : 분수찾기 (2) | 2023.01.27 |
[JAVA]백준 알고리즘 2292번 : 벌집 (0) | 2023.01.23 |