본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 1712번: 손익분기점 C언어 (개선)

문제 출처: www.acmicpc.net/problem/1712

 

1712번: 손익분기점

월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와

www.acmicpc.net

1. 코드

#include <stdio.h>

int main(void)
{
    long A = 0, B = 0, C = 0, X = 1;
    
    scanf("%ld %ld %ld", &A, &B, &C);
    
    if(B >= C)
    {
    	printf("-1");
    	return 0;
    }
    X = A/(C - B) + 1;
    
    printf("%d", X);
    return 0;
}

2. 문제 해결 방식

먼저 앞에서 저는 무한 반복문을 사용하여 최초로 이익이 발생하는 판매량을 알아내었습니다. 하지만 그 방식은 계산해야할 숫자가 커질수록 시간이 오래걸립니다.

그렇기 때문에 다른 방식으로 접근을 해야합니다. 먼저 A + B * X < C * X 라는 수식이 완성이 되는데 이것을 조금 정리하는 과정을 보여주자면

순번 수식
1 A + B * X < C * X
2 A < C * X - B * X
3 A < (C - B) * X
4 A / (C - B) < X

이런 과정이 되는데 A / (C - B)를 하게 되면 나머지가 남을수도 있다. 그렇지만 X의 값은 최초로 이익이 발생하는 판매량이기 때문에 소숫점을 무시하고 1을 더하면 해결이 된다.

3. 느낀 점

이 과정을 나는 결국 생각하지 못한 채 검색을 통해서 알게 되었다. 백준을 공부를 하면서 내가 엄청나게 코드를 못다루는 것을 계속해서 깨닫게 되는 것 같다. 아무리 영어의 문법을 알더라도 그것을 자연스럽게 구사할 수 없는 것처럼 C언어의 문법을 알더라도 C언어의 모든 특성을 지닌 채 구사할 수 없는 것이다.

C언어도 C언어이지만 알고리즘에 대한 문제 해결 능력 또한 많이 부족한 것 같다. 솔직히 이 문제 자체는 쉬운 문제라고 생각된다. 하지만 나는 시간의 제한이라는 1가지 제약이 걸리자 아무것도 해결을 못하고 수식적으로 접근을 할 생각을 못했다.

앞으로도 열심히 해야겠다는 생각밖에 안든다.