알고리즘

백준 #1712 java 2023.01.17

chaewonni 2023. 1. 17. 04:51

손익분기점 문제라니.. 갑자기 경제문제를 풀라고 하니 은근 당황스러웠다.

 

package boj_basic.step7;

import java.util.Scanner;

public class Q1712 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int A = sc.nextInt(); //고정비용
		int B = sc.nextInt(); //가변비용
		int C = sc.nextInt(); //제품가격
		
		int s = 0;
		int i = 0;
		for(int x = 2^63-1; x>0; x--) {
			if((A+B*x)<C*x) {
				s = x;
			}
			else {
				i = -1;
			}
				
		}
		if(s>0)
			System.out.println(s);
		else
			System.out.println(i);
			
		

	}

}

처음에는 for문을 이용하여 풀었는데  입력범위가 2100000000(21억)까지라 int범위와 아슬아슬해서 long으로 바꿔도 풀어보고.. 했는데 오류가 나서 반복문이 아닌 다른 방법으로 풀어야 하나 생각이 들었다. 

 

근데 완전 손익분기점 공식을 써서 풀어야 하는 것이었다. 

 

먼저, 고정, 가변, 제품 가격을 입력 받고

제품 생상 비용(가변 비용, B)가 제품의 가격(C)보다 비싸거나 같다면 제품을 아무리 팔아도 이득이 될 수 없으므로 -1을 리턴해준다.

그 외의 경우는 무조건 제품 가격이 가변 비용보다 크므로 팔면 팔수록 이득이 발생하게 되므로, 처음 이득이 발생하는 지점을 찾는 공식을 사용하여 구해준다.

 

package boj_basic.step7;

import java.util.Scanner;

public class Q1712_1 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int A = sc.nextInt(); //고정비용
		int B = sc.nextInt(); //가변비용
		int C = sc.nextInt(); //제품가격
		
		int s = 0;
		if(B>=C)
			System.out.println(-1);
		else {
			s=A/(C-B); //손익분기점 계산법
			System.out.println(s+1);
		}
			

	}

}

 

손익분기점에 대한 내용은 https://st-lab.tistory.com/71 을 참고하였다.

마지막에 +1을 해주는 부분이 어려웠다.

 

나중을 대비하여 손익분기점 공식을 외워두는 것이 좋겠다!