본문 바로가기
C

[C]백준 08.기본수학1: 1712

by 열지희공 2022. 1. 11.

백준 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;
}