2020. 10. 8. 17:56ㆍProgramming/알고리즘 연습
문제
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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을 출력한다.
주의할 점
시간 제한 | 메모리 |
0.35초 | 128MB |
첫번째 실수
for(int i=1; i<2100000000; i++)
{
if(num1 + num2*i <= num3*i)
{
std::cout << i;
return;
}
}
입력에 각각의 숫자들이 21억이하의 자연수라고 써있어서 단순하게 진행하면 문제의 조건인 제한시간을 맞출 수 없다.
고민
시간제한이 0.35초라면 한번의 연산정도로 끝내야 할 것 같아서 식을 간단히하였다.
고정비용 : A, 가변비용 : B, 수업 : C
A + Bx < Cx인 x를 찾는문제로 변경이 된다. 정리하면 A/(C-B) < x가 되고 이를 이용한다.
두번째 실수
std::cout << A/(C-B) + 1;
식은 매우 간단해졌지만 손익분기점이 발생하지 않는 경우에 대한 예외처리가 없다. 이를 해결하기 위해 손익분기점이 발생하지 않는 경우를 고민하였다.
고민
A/(C-B) < x 이 식에서 x가 존재하지 않기 위해서는 B >= C밖에 없다. 그렇기 때문에 첫줄에 해당 조건을 추가한다.
최종 코드
#include <iostream>
int main()
{
long int A, B, C;
std::cin >> A;
std::cin >> B;
std::cin >> C;
if(B>=C)
{
std::cout << -1;
return 0;
}
std::cout << A/(C-B) + 1;
}
'Programming > 알고리즘 연습' 카테고리의 다른 글
소수 찾기 알고리즘 (0) | 2020.10.19 |
---|