프로그래머스 PCCP 기출문제 - 저수지 물 사용량 예측(Java)

2026. 6. 11. 23:52·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

 

프로그래밍 강의 | 프로그래머스 스쿨

국비지원 K-디지털 기초역량훈련 코스, K-디지털 트레이닝 코스, 선배 개발자와 함께하는 라이브 교육, 데이터 사이언스, PCCP/PCCE 자격증, 세미나, 각종 프로그래밍 기초부터 실전까지 원하는 강

school.programmers.co.kr

 


📌 문제 개요

현재 저수지에 저장된 물의 양 storage 와 지난달 물 사용량 usage 가 주어진다.

또한 앞으로의 월별 물 사용량 변화율이 change 배열로 제공된다.

 

매달 사용량을 계산하면서 누적 사용량을 구하고, 누적 사용량이 저수지 저장량을 초과하는 최초 시점을 반환해야 한다.

가뭄이 끝날 때까지 물이 부족하지 않으면 -1 을 반환한다.


📌 접근 방법

문제를 처음 보면 단순 구현 문제처럼 보인다.

반복문을 돌면서 매달 사용량을 계산하고 누적 사용량만 구하면 되기 때문이다.

 

하지만 이 문제의 핵심은 정수 나눗셈으로 인한 오차를 주의해야 한다는 점이다.

처음에는 아래와 같이 계산할 수 있다.

usage = usage + (usage / 100) * change[i];

하지만 정수 나눗셈이 먼저 수행되면서 소수점이 제거되어 오답이 발생할 수 있다.

따라서 변화율을 적용할 때는 곱셈을 먼저 수행하는 방식으로 사용량을 계산해야 한다.

이후 누적 사용량을 저장하면서 저장량을 초과하는 시점을 찾으면 된다.


📌 핵심 아이디어

1. 변화율을 적용하여 사용량 계산

매달 사용량은 전월 사용량 기준으로 계산된다.

usage = usage * (100 + change[i]) / 100;

예를 들어

usage = 500
change[i] = 10

이라면 사용량이 10% 증가한다.

500 * 110 / 100 = 550

2. 증가와 감소를 하나의 식으로 처리

위 공식은 증가와 감소를 모두 처리할 수 있다.

따라서 별도의 조건문 없이 하나의 식으로 모든 경우를 처리할 수 있다.

change[i] = 10
→ 110%

change[i] = -10
→ 90%

change[i] = 25
→ 125%

change[i] = -33
→ 67%

3. 정수 나눗셈 주의

처음에는 아래와 같이 계산할 수 있다.

usage = usage + (usage / 100) * change[i];

하지만 소수점 0.5 가 제거된다.

550 / 100 = 5

 

예를 들어, 실제 계산은 아래처럼 되어야 하지만

usage = 550
change[i] = -10
550 * 90 / 100 = 495

 

위 방식은 오답이 된다.

따라서 곱셈을 먼저 수행하는 방식으로 계산해야 한다.

550 + (5 * -10) = 500

4. 누적 사용량 계산

매달 계산된 사용량을 누적한다.

total_usage += usage;

누적 사용량이 저장량보다 커지는 순간 물이 부족해진다.

현재 월 인덱스를 반환하면 된다.

if(total_usage > storage){
    return i;
}

📌 전체 코드

class Solution {
    public int solution(int storage, int usage, int[] change) {
        int total_usage = 0;

        for(int i = 0; i < change.length; i++){
            usage = usage * (100 + change[i]) / 100;
            total_usage += usage;

            if(total_usage > storage){
                return i;
            }
        }

        return -1;
    }
}

📄 정리

  • 매달 사용량을 갱신하면서 누적 사용량을 계산하는 구현 문제
  • 변화율 계산은 usage * (100 + change[i]) / 100 공식을 사용한다.
  • 증가와 감소를 하나의 식으로 처리할 수 있다.
  • 정수 나눗셈에서는 곱셈을 먼저 수행해야 오차를 방지할 수 있다.
  • 누적 사용량이 저장량을 초과하는 최초 시점을 반환하면 된다.
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 지폐 접기 JAVA 풀이 (구현, 반복문)  (0) 2026.06.13
프로그래머스 자릿수 더하기 JAVA 풀이 (수학, 구현)  (0) 2026.06.12
프로그래머스 옹알이 JAVA 풀이(문자열, 구현)  (0) 2026.06.10
프로그래머스 시험장 나누기 JAVA 풀이 (이분 탐색, DFS, 트리)  (0) 2026.06.10
프로그래머스 문자열 나누기 JAVA 풀이 (문자열, 구현)  (0) 2026.06.09
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 지폐 접기 JAVA 풀이 (구현, 반복문)
  • 프로그래머스 자릿수 더하기 JAVA 풀이 (수학, 구현)
  • 프로그래머스 옹알이 JAVA 풀이(문자열, 구현)
  • 프로그래머스 시험장 나누기 JAVA 풀이 (이분 탐색, DFS, 트리)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

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

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    백준
    배열
    level1
    solved.ac
    정렬
    코딩테스트
    dp
    알고리즘
    문자열
    수학
    시뮬레이션
    Level2
    자료구조
    정보처리기사
    springboot
    자바
    java
    정보처리기사 실기 기출문제
    정처기실기
    피보나치
    정처기
    완전탐색
    브루트포스
    level0
    구현
    기출문제
    정처기오답노트
    백엔드개발자
    실기
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 PCCP 기출문제 - 저수지 물 사용량 예측(Java)
상단으로

티스토리툴바