프로그래머스 6번 물 부족

KIMYEONGJUN·2026년 5월 1일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

ㅇㅇ시에서는 저수지가 하나 있는데, 도시 내에서 사용하는 모든 물은 이 저수지에 저장된 물을 끌어와 사용합니다.
이상 기후로 인해 극심한 가뭄이 예고된 상황에서, 지난 달의 물 사용량과 이번달부터 일정 기간 동안의 월별 물 사용량의 변화를 예측한 값을 이용해 몇 달 뒤 물이 부족해지는지 예측하려고 합니다.
이번달부터의 월별 물 사용량 변화를 예측한 값은 다음과 같이 리스트에 담겨 주어집니다.

[10, -10, 10, -10, 10, -10, 10, -10, 10, -10]
리스트의 각 원소는 해당 월의 물 사용량이 전 달에 비해 몇 % 만큼 증가 또는 감소하는지를 나타냅니다.
예를 들어, 이번달의 물 사용량 (리스트의 첫 번째 원소)은 지난 달 보다 10% 증가한 값이며, 다음 달(리스트의 두 번째 원소)의 물 사용량은 이번달 사용량에서 10%만큼 감소한 값입니다.
자세한 값은 입출력 예시를 참고해 주세요.
현재 저수지에 저장된 물의 양을 나타내는 정수 storage와 지난 달 물 사용량을 나타내는 정수 usage, 월별 물 사용량이 전 달 대비 어떻게 변하는지 저장된 정수 리스트 change가 주어질 때 몇 달 뒤 물이 부족해지는지 return 하도록 solution 함수를 작성하려 합니다.
코드가 올바르게 작동하도록 한 줄을 수정해 solution 함수를 완성해 주세요. 가뭄이 끝날때 까지 저수지의 물이 남아 있다면 -1을 return합니다.

내가 이 문제를 보고 생각해본 부분

usage는 매달 사용량인데, 처음에는 지난 달 사용량이 주어진다.
change 배열 각 요소에 따라 usage를 갱신한다: 
예를 들어, change[i] = 10이면 전 달 사용량의 110%가 이번 달 사용량이 된다.
(100 + change[i]) / 100으로 증가 또는 감소를 반영하고, 정수 나눗셈에서 소수점은 자동으로 버린다.
매달 갱신된 usage를 total_usage에 더하여 누적 사용량을 계산한다.
만약 총 사용량이 storage보다 커지면, 즉시 부족한 달의 인덱스 i를 반환한다.
모든 달을 계산해도 부족하지 않으면 -1을 반환한다.

코드로 구현

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;
    }
}

프로그래머스에서 한줄 변경한 코드

package programmers;

// 프로그래머스 6번 물 부족
public class Main6 {
    public static void main(String[] args) {
        int storage = 5141; // 예시: 현재 저장된 물 양
        int usage = 500;    // 예시: 지난 달 물 사용량
        int[] change = {10, -10, 10, -10, 10, -10, 10, -10, 10, -10}; // 예시 변화율 배열

        int total_usage = 0;
        int result = -1;  // 결과 저장용, 부족한 달 없으면 -1 유지

        for (int i = 0; i < change.length; i++) {
            usage = usage * (100 + change[i]) / 100;
            total_usage += usage;
            if (total_usage > storage) {
                result = i;
                break;
            }
        }

        System.out.println(result);
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글