백준 1712_손익분기점.cpp

hello_hidi·2021년 6월 30일
0

baekjoon_C++

목록 보기
13/33
post-thumbnail

소스코드

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

0개의 댓글