소스코드
#include <iostream>
using namespace std;
int main(){
long long a,b,c;
cin >> a >> b >> c;
if(b >= c){
cout << -1 << endl;
return 0;
}
long long BreakEvenPoint = (int)(a / (c-b));
cout << BreakEvenPoint + 1 << endl;
return 0;
}
- 변수
long long a, b, c: 고정비, 가변비용, 판매비
long long BreakEvenPoint : 손익분기점
- 알고리즘
- 실패한 코드
이 코드의 문제점은 breakevenpoint값을 하나씩 증가하면 시간초과를 받게 된다. 그래서 언제 이익이 발생하는지를 식으로 만들어야 했다.while(1){ if(TotalPrice >= TotalIncome){ BreakEvenPoint++; }else{ break; } //cout << TotalPrice << " " << TotalIncome << endl; TotalPrice = a + b*BreakEvenPoint; TotalIncome = c*BreakEvenPoint; }
- 일단 b가 c보다 크면 손익분기점을 넘길 수 있기 때문에 -1을 출력하고 프로그램을 끝낸다.
- 그래서 아예 식으로 만들어서 계산을 했다. 어차피
a + b x BreakEvenPoint >= c x BreakEvenPoint에서 BreakEvenPoint의 값이 필요한거였기 때문에 BreakEvenPoint에 관한 식으로 만들었다.
- 배운점
long long : -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
=> 그냥 범위 문제 될거 같으면 long long 쓰자
- 아쉬운점&느낀점
수학 관련 알고리즘 문제는 식을 만들 수 있는지부터 확인해야함을 배웠다.