백준 1712
내코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
int bep;
if (b == c) {
bep = -1;
}
else {
bep = (a / (c - b)) + 1;
}
if (bep < 0) {
printf("%d", -1);
}
else
printf("%d", bep);
return 0;
}
손익분기점(bep)를 구하는 식을 세워본다면
a+b*(bep)<c*(bep)
a/(b-c)<(bep)
이렇게 세울 수 있다.
손익분기점은 생산대수로 자연수이기때문에 bep = a/(b-c)+1 이라고 생각할 수 있다.
따라서 bep가 0보다 작아서 손익분기점이 존재하지 않을 때는 -1을 출력하고 그 외에는 bep를 출력하도록 했다.
처음에는 이렇게 코드를 마무리했는데 런타임에러(DivisionByZeor)가 떴다. DivisionByZero는 말그대로 0으로 나누었을 때 발생하는데 내 코드에서는 b=c일때 발생한다. 그래서 코드 초반부분에 b=c라면 bep를 -1로 설정하고 그렇지않다면 위의 식대로 bep = a/(b-c)+1로 설정하여 문제를 풀었다.
다른 사람의 코드를 살펴보니 나처럼 조건문을 b=c일 때와 아닐 때, bep<0일때와 아닐때로 나누지 않고 b>=c일때와 아닐때로 나누어 코드를 작성하여 훨씬 간단했다. 아래는 그 방식으로 작성한 코드이다.
<출처: https://wtg-study.tistory.com/2 >
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
int bep;
if (b >= c) {
bep = -1;
}
else {
bep = (a / (c - b)) + 1;
}
printf("%d", bep);
return 0;
}
'C' 카테고리의 다른 글
[C]백준 08.기본수학1: 1193 (0) | 2022.01.11 |
---|---|
[C]백준 08.기본수학1: 2292 (0) | 2022.01.11 |
[C]백준 07.문자열(11654, 11720, 10809, 2675, 1157, 1152, 2908, 5622, 2941, 1316) (0) | 2022.01.09 |
[C]백준 06.함수(15596, 4673, 1065) (0) | 2022.01.09 |
[C]백준 05.1차원배열(10818, 2562, 2577, 3052, 1546, 8958, 4344) (0) | 2022.01.08 |