본문 바로가기

컴퓨터 관련

[알고리즘] 백준 1712번 문제 풀이

728x90
반응형

1. 문제 보기

해당 문제는 문제 링크를 통해 보실 수 있습니다.

2. 풀이 코드

#include <stdio.h>

int main(void) {
    int year_cost = 0;
    int produce_cost = 0;
    int product_cost = 0;
    int break_even_point = 0;

    if (scanf("%d %d %d", &year_cost, &produce_cost, &product_cost) == NULL) {
        return 0;
    }

    // 값을 나누기 전에, 값이 0이라면 -1을 출력하도록 합니다.
    if (year_cost == 0 || (product_cost - produce_cost) == 0) {
        printf("-1\n");
        return 0;
    }

    // 손익 분기점을 계산합니다.
    break_even_point = year_cost / (product_cost - produce_cost) ;

    // 손익 분기점을 출력합니다.
    if (break_even_point < 0)
        printf("-1\n");
    else
        printf("%d\n",(break_even_point+1));

    return 0;
}

3. 문제 풀이

문제의 요구 조건

  • 시간 제한: 0.35초
  • 출력 조건: 손익분기점이 최초로 발생하는 판매량 찾기

시간 제한과 관련하여

이 문제는 시간 제한이 1초도 되지 않습니다. 즉, 반복문 같은 것은 쓸 수도 없다는 이야기가 됩니다. 따라서, 산술 연산을 통해 출력값을 찾아야 함을 의미합니다.

손익분기점 계산식 (일반식)

이 문제에서 손익 분기점은 다음과 같은 식을 성립하면 됩니다.
(왜 이런식이 나왔는지는 한번 생각해보시기 바랍니다.)

1번식: 1년 고정 비용(year_cost) + (생산 비용(produce_cost) * 생산한 물건의 갯수) - (상품의 가격(product_cost) * 생산한 물건의 갯수) > 0

여기서 식을 정리하면 다음과 같은 식이 나옵니다.

2번식: 1년 고정 비용(year_cost) > (생산 비용(produce_cost) * 생산한 물건의 갯수) - (상품의 가격(product_cost) * 생산한 물건의 갯수)
3번식: 1년 고정 비용(year_cost) > (생산 비용(produce_cost) - 상품의 가격(product_cost)) * 생산한 물건의 갯수

여기서 1년 고정 비용(year_cost)에서 (생산 비용(produce_cost) - 상품의 가격(product_cost))를 나누면 생산한 물건의 갯수. 즉, 얼만큼 이상은 생산해야 한다는 물건의 갯수가 나옵니다. 따라서 손익분기점 계산을 코드에서는 다음과 같이 구현하였습니다:

break_even_point = year_cost / (product_cost - produce_cost) ;

손익분기점 계산식 (예시)

혹시 위 설명이 이해가 안가시는 분을 위해, 예시를 들어 설명드리겠습니다.
예시에서 사용한 입력값은 다음과 같습니다:

  • 1년 고정 비용(year_cost): 1000
  • 생산 비용(produce_cost): 70
  • 상품의 가격(product_cost): 170
1번식: 1000 + (70 * 생산한 물건의 갯수) - (170 * 생산한 물건의 갯수) > 0
2번식: 1000 > (170 * 생산한 물건의 갯수) - (70 * 생산한 물건의 갯수)
3번식: 1000 > 100 * 생산한 물건의 갯수

그럼 이 식에 따라 1000 / 100을 하면, 10이라는 값이 나옵니다. 그런데, 여기서의 손익분기점은 손실과 이익이 교차하는 부분이 아닌, 이익이 발생하는 최소한의 판매량을 요구하고 있습니다. 따라서, 구한 10이라는 값에 1을 더합니다. 출력값으로는 11이 출력되도록 합니다.

반응형