[백준] 1712. 손익분기점

bonnie·2022년 1월 12일
0

🟢 알고리즘 풀이

목록 보기
27/27
post-thumbnail

문제

https://www.acmicpc.net/problem/1712

풀이

최초로 이익이 발생하는 순간의 판매량을 출력하고 손익 분기점이 없으면 -1을 출력하는 문제.
손익분기점에 대한 이해가 있다면 좀 더 쉽게 풀리는 문제이다.
고정비용(a), 가변비용(b), 1개당 판매 가격(c) 3개의 변수가 필요하다.
간단하게 식으로 보면
n(개수) * c(판매가격) > a(고정비용) + (n(개수) * b(가변비용))
위와 같고, 여기서 n을 구하면 된다.
n을 구하는 식은
nc = a + (nb) → nc - nb = a → n(c- b) = a → n = a / (c-b) 인데, 이 식은 총 수입과 총 비용이 같아지는 지점이기 때문에 문제에서 요구하는 이익이 발생하는 순간은 n+1,
a / (c-b) + 1 이다.
이제 이익이 발생하지 않는 순간을 확인해야한다. (-1 출력)
이익이 발생하지 않는다는 것은 결국 위의 식이 0 보다 크다는 것을 의미한다. 이 때, 분모가 음수이면 자연스럽게 값이 음수가 되므로(분모가 0이 되는 경우에도 손익분기점이 발생하지 않음)
(c-b) <= 0 → c <= b 이런 식으로 정리할 수 있다.
참고로 하단의 코드에서 breakEvenPoint() 함수를 만든 것은 특별한 의미가 있는 것이 아니다. 그냥...뭔가 다른 방식으로 하고 싶었을 뿐.....

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Q_1712 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		int a = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		int c = Integer.parseInt(st.nextToken());
		System.out.println(breakEvenPoint(a, b, c));
	}

	public static int breakEvenPoint(int a, int b, int c) {
		int point = 0;

		if (c <= b) {
			point = -1;
		} else {
			point = (a / (c - b)) + 1;
		}
		return point;
	}

}
profile
괴발🐱개발🐶

0개의 댓글