
내가 생각했을때 문제에서 원하는부분
ㅇㅇ시에서는 저수지가 하나 있는데, 도시 내에서 사용하는 모든 물은 이 저수지에 저장된 물을 끌어와 사용합니다.
이상 기후로 인해 극심한 가뭄이 예고된 상황에서, 지난 달의 물 사용량과 이번달부터 일정 기간 동안의 월별 물 사용량의 변화를 예측한 값을 이용해 몇 달 뒤 물이 부족해지는지 예측하려고 합니다.
이번달부터의 월별 물 사용량 변화를 예측한 값은 다음과 같이 리스트에 담겨 주어집니다.
[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);
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.