ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준][1712] 손익분기점 - Python3
    코딩 테스트 2021. 2. 13. 15:25

    안녕하세요 혀래이입니다 :)

    요새는 코딩 테스트 강의를 들으면서 유형에 맞는 기본기 문제를 풀고 싶은데 프로그래머스에는 어려운 문제만 남아있어서.. 백준으로 넘어왔습니다. (기본기를 풀기 위함임.. 어려워서 그런거 아님... 아무튼 아님...)

    백준은 오랜만에 푸는데 프로그래머스에 비해서 시간 제한이 엄격하고 입력도 직접 받아주어야 한다는 점이 다르다고 할 수 있겠네요.

    그럼 기본 수학 1단계에 있는 손익분기점 문제 풀어보도록 하겠습니다!

     

    1. 문제설명

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

    예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.

    노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.

    A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.

    입력

    첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.

    출력

    첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.

    예제 입력 1

    1000 70 170

    예제 출력 1

    11

    예제 입력 2

    3 2 1

    예제 출력 2

    -1

     

    2. 접근 방법 및 풀이

    - 처음엔 무작정 while문을 사용해서 B와 C의 갯수만큼 곱해주면서 if문과 비교연산자를 사용해서 비교하고 손익분기점을넘으면 출력해주는 프로그램을 만들었습니다.

    예시)

    잘못된 풀이입니다!

    - 사실 이렇게 해도 올바른 정답을 도출할 수 있지만 최악의 경우, 예를 들면 A가 21억이고 C-B(한 개를 판매했을 때 얻는 금액) 이 1이라면 while문의 연산을 21억번 해야 하기 때문에 매우 오랜시간이 걸리게 됩니다.

    - 시간을 단축하기 위한 저의 아이디어는 문제가 손익분기점을 넘는 상품 판매 갯수(i)의 최소값을 출력하는 것이고 i를 곱한 값은 항상 오름차순 정렬이 되어 있으니 '이진탐색을 구현해보자!' 였습니다. 이외에 문제의 분류가 기본 수학이기 때문에 부족한 수학 지식이지만 식을 요리조리 다듬어서 좀 더 깔끔하게 코드를 짜보려 노력했습니다.

    최종 코드 입니다.

     

    3. 후기

    - 이진탐색을 잘 모르신다면 유튜브에 나동빈님의 코딩테스트 강의를 추천드립니다! :)

    - 프로그래머스 문제는 알고리즘 보다는 알맞는 자료구조를 사용해서 구현하는 데 초점을 맞추는 느낌이었고, 백준 문제는 좀 더 알고리즘에 초점을 맞춘 느낌? ( 아 물론 level3 문제는 안풀어봐서 모른다. )

Designed by Tistory.