반응형
https://www.acmicpc.net/problem/1712
이번 포스팅은 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();
}
}
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 알고리즘][자바] 1193번 : 분수찾기 (0) | 2021.07.04 |
---|---|
[백준 알고리즘][자바] 2292번 : 벌집 (0) | 2021.07.03 |
[백준 알고리즘][자바] 1316번 : 그룹 단어 체커 (0) | 2021.06.13 |
[백준 알고리즘][자바] 2941번 : 크로아티아 알파벳 (0) | 2021.06.05 |
[백준 알고리즘][자바] 2908번 : 상수 (0) | 2021.06.05 |
댓글