1712번: 손익분기점
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와
www.acmicpc.net
아이디어
1. A는 고정 비용, B는 가변 비용, C는 수입이다(B, C는 노트북 한 대당 발생)
2. 손익분기점을 넘을 때(총 수입 > 고정 비용 + 가변 비용) 출력
3. split(" ")해서 A, B, C를 각각 저장하자! -> 생각보다 과정이 복잡하다 -> StringTokenizer로 변경
4. 손익분기점이 없으면 -1을 출력해야 한다.
- 손익분기점이 없다?
- 아무리 팔아도 비용보다 수입이 더 많아지지 않는다는 의미
- 가변 비용이 수입보다 크거나 같으면 항상 손익분기점이 없음! (B >= C)
import java.io.*;
import java.util.*;
class BJ_1712 {
public static void main(String[] args) throws IOException {
// A 매년 발생하는 고정비용
// B 노트북 한 대당 발생 비용
// C 노트북 가격
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bufferedReader.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
// 지출 : a+bi
// 수익: ci
// a+bi < ci 될 때 i 개수 출력
// 손익분기점 없으면 -1 출력
int i = 0;
while (true) {
if (a+(b*i) < c*i) {
break;
} else if ((b) >= (c)) {
i = -1;
break;
}
i++;
}
System.out.println(i);
}
}
이렇게 작성했는데 계속 틀려서...
구글링을 조금 했다. 찾아보니 다들 반복문이 아니라 조건문 한 줄로 해결하고 있었다(혼자 풀어보려고 자세히는 안 봤음)
성능 상으로도 반복문을 계속 수행하는 것보다는 한 줄로 해결하는 게 더 좋을 것 같다.
아이디어2
예시를 보자. A = 1000, B = 70, C = 170일 때
노트북 한 대를 판다.
170 - ( 1000 + 70 ) = - 900
두 대를 판다.
170 - ( 900 + 70 ) = - 800
.
.
.
170 - ( 100 + 70 ) = 0
170 - ( 0 + 70 )= 100
10개째에서 수입과 비용이 같아지고, 11째에서 손익분기점이 발생한다.
CN - ( A + BN ) = 0
A = CN - BN = N( C - B )
N = A / ( C - B )
N = A / ( C - B )
손익분기점을 넘어야 하므로 +1
import java.io.*;
import java.util.*;
class BJ_1712 {
public static void main(String[] args) throws IOException {
// A 매년 발생하는 고정비용
// B 노트북 한 대당 발생 비용
// C 노트북 가격
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bufferedReader.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
// 지출 : a+bi
// 수익: ci
// a+bi < ci 될 때 i 개수 출력
// 손익분기점 없으면 -1 출력
int i;
if ( b >= c ) {
i = -1;
} else {
i = (a)/(c-b) + 1;
}
System.out.println(i);
}
}
간단하게 풀 수 있었다.
'Algorithm > 백준' 카테고리의 다른 글
[Java][백준] 8911번 거북이 (2) | 2023.12.01 |
---|---|
[Java][백준] 1459번 걷기 (0) | 2023.11.29 |
[Java][백준] 8595번 히든 넘버 (0) | 2023.11.14 |
[Java][백준] 2839번 설탕 배달 (1) | 2023.11.14 |
[Java][백준] 1904번 01타일 (1) | 2023.11.14 |