Algorithm

백준 1712번 : 손익분기점 c언어

study ticket 2021. 10. 10. 00:20

문제

월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.

예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.

노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.

A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.

출력

첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.

예제 입력 1 복사

1000 70 170

예제 출력 1 복사

11

예제 입력 2 복사

3 2 1

예제 출력 2 복사

-1

예제 입력 3 복사

2100000000 9 10

예제 출력 3 복사

2100000001

 

고정비용이 a이고 노트북1대를 만들때 사용되는 비용은 b이다. 노트북 한대의 가격은 c이므로 손익분기점을 넘는 식을 만들면 a+b*cnt<c*cnt(cnt==판매대수)이다. 이것을 간단히 만들면 a/(c-b)<cnt이다. 그러므로 a/(c-b)가 cnt보다 작을때 손익분기점을 넘는것이다. 따라서 a/(c-b)에 1을 더하면 손익분기점이 넘는 판매대수를 구할수 있다. 하지만 a/(c-b)가 소수일수도 있기때문에 출력해주는 자료형을 int형으로 바꿔서 출력해준다.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
	long a, b, c,num;
	scanf("%d %d %d", &a, &b, &c);

	if (b >= c)
		{
			printf("-1");
			return 0;
		}
	num = a / (c - b) + 1;
	printf("%d", num);

}

 

 

느낀점

나는 처음에 단순히 문제를 아무생각없이 보아 반복문을 이용하여 풀려하였다. 하지만 답은 나오지만 문제에서 21억까지의 숫자를 넣을수 있다 하였으니, 자칫잘못하면 21억이 넘는 횟수를 반복해야되고 그러면 너무 많은 시간이 들게된다는 것을 알게되었다. 때로는 나는 보통 단순하게 문제를 그대로 코드로 바꾸어 푸는것을 좋아하지만 대체로 많은 문제들이 그러면 시간초과를 하게 된다. 좀 더 머리를 쓰는 습관을 들여야겠다.

(처음에 푼 코드)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
	int a, b, c,cnt=1;
	scanf("%d %d %d", &a, &b, &c);
	while (1)
	{
		if (b > c)
		{
			printf("-1");
			break;
		}
		if (a + b * cnt < c * cnt)
		{
			printf("%d", cnt);
			break;
		}
		else
		{
			cnt++;
		}
	}
}
728x90