[Problem Solving/Java] 백준 1712번 - 손익분기점

2023. 8. 30. 09:48·알고리즘 문제 풀이 (Problem Solving)

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

 

1712번: 손익분기점

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

www.acmicpc.net

문제

월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 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을 출력한다.

첫 번째 시도

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

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String a = br.readLine();
		String[] b = a.split(" ");
		long fix = Integer.parseInt(b[0]);
		long var = Integer.parseInt(b[1]);
		long price = Integer.parseInt(b[2]);

		long k = 0;
		
		if(var<price) {
			System.out.println(fix/(price-var)+1);
			
		}
		else
			System.out.println(-1);
		
	
	}
}
  • 위의 코드를 실행했을 때 런타임 에러 (ArrayIndexOutOfBounds) 발생
    아래 코드로 수정 후 에러가 사라졌다.

해결 방법

  • 처음엔 for문을 사용해서 고정비용(fix)+가변비용(var)*i이 총수입(price*i)을 넘어설 때의 i값을 print 하려고 했지만 시간초과로 불가능했다. 문제에서는 for문 이외의 방법을 유도했다. 21억 이하의 자연수가 들어가야 하므로 계산 결과는 int 자료형을 초과할 수 있으므로 long을 사용했다. 고정비용을 가격-가변비용으로 나눈 뒤 1을 더한다. 나머지는 버리는 나눗셈 연산은 손익분기점과 같거나 작은 수량으로 나타나기 때문이다. 예외처리는 가변비용이 가격보다 높을 경우 -1을 출력하도록 했다.

어려웠던 점 / 고쳐야할 점

  • 수학적인 사고력 필요.
반응형

'알고리즘 문제 풀이 (Problem Solving)' 카테고리의 다른 글

[Problem Solving/Java] 백준 4948번 - 베르트랑 공준  (2) 2024.01.02
[Problem Solving/Java] 백준 1929번 - 소수 구하기  (0) 2024.01.02
[Problem Solving/Java] 백준 2581번 - 소수  (0) 2023.08.30
[Problem Solving/Java] 백준 1978번 - 소수 찾기  (0) 2023.08.30
[Problem Solving/Java] 백준 1316번 - 그룹 단어 체커  (0) 2022.04.07
'알고리즘 문제 풀이 (Problem Solving)' 카테고리의 다른 글
  • [Problem Solving/Java] 백준 1929번 - 소수 구하기
  • [Problem Solving/Java] 백준 2581번 - 소수
  • [Problem Solving/Java] 백준 1978번 - 소수 찾기
  • [Problem Solving/Java] 백준 1316번 - 그룹 단어 체커
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    deepseek
    python
    Linux
    ADsP
    데이터분석
    java
    Linux master
    DevOps
    백준
    pandas
    자바
    Kubernetes
    백준알고리즘
    JPA
    javascript
    리눅스 마스터 2급
    AWS
    springboot
    JSON
    리눅스 마스터 2급 2차
    MyBatis
    timescaledb
    Vue.js
    Kafka
    오답노트
    Spring boot
    PostgreSQL
    백준자바
    백준온라인저지
    docker
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Problem Solving/Java] 백준 1712번 - 손익분기점
상단으로

티스토리툴바