⭐️ 코드
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int completed = 0; // 완료한 index
// answer배열을 얼마나 만들어야 할지 모르기 때문에 ArrayList 생성
ArrayList<Integer> result = new ArrayList<Integer>();
while (!(completed == progresses.length)) {
for(int i = 0; i < progresses.length; i++) {
progresses[i] += speeds[i];
}
int res = completed; // 이미 완료한 개수 빼주기
if(progresses[completed] >= 100) {
completed++;
// 나머지 완료한거 카운트
for(int i = completed; i<progresses.length; i++) {
if(progresses[completed] >= 100) {
completed++;
}
}
result.add(completed - res); // 이미 완료한거 제외하고 계산
}
}
int[] answer = new int[result.size()]; // return 값 저장되는 배열
for(int i = 0; i<answer.length; i++) {
answer[i] = result.get(i);
}
return answer;
}
}
💡 문제 풀이
문제를 읽으면서 처음에는 Queue로 풀어야만 하는 줄 알았다. 하지만 생각해 보니 ArrayList와 그냥 Array를 이용하여 계산하면 수준 낮은 나에게 알맞은 연산 방식으로 바꿀 수 있었다.
HashMap, LinkedHashMap, Queue, ArrayDeque 등 여러 방식을 써봤는데 항상 데이터의 index 계산이 어려워서 풀 수가 없었다.
그래서 그냥 단순하게 생각을 바꿔서 진행해 보았다.
위에서 문제를 해결한 방식이 무조건적으로 맞다고는 생각이 들지는 않지만 일단 정답은 나왔으니 한번 써본다...
문제 풀이 방법은 크게 어렵지 않다.
// 완료한 index
int completed = 0;
// answer배열을 얼마나 만들어야 할지 모르기 때문에 ArrayList 생성
ArrayList<Integer> result = new ArrayList<Integer>();
progressess 배열의 크기만큼 완료한 개수를 담아줄 completed 변수와, 문제에서 return 타입은 Array 형태인데 아직 몇 개가 반환되는지 모르기 때문에 ArrayList를 이용하여 동적으로 하나씩 늘려주는 형태로 진행했다.
while (!(completed == progresses.length)) {
for(int i = 0; i < progresses.length; i++) {
progresses[i] += speeds[i];
}
int res = completed;
if(progresses[completed] >= 100) {
completed++;
for(int i = completed; i<progresses.length; i++) {
if(progresses[completed] >= 100) {
completed++;
}
}
result.add(completed - res);
}
}
while문에서 매일 speeds만큼 작업 진행도가 올라가기 때문에 조건 없이 하루하루 늘려주는 형태로 했다.
앞에서부터 100%로 완료가 되어야지 다음 것도 배포 가능하기 때문에 일단 제일 앞에 있는 항목이 100%가 되었는지 확인 한 다음 completed 값을 늘려갔다. completed값이 늘수록 반복문을 조금씩 덜 수행할 수 있도록 조정하였고,
마지막으로 completed변수에서 res를 뺀 값이 이미 완료한 항목을 제외하고 배포되는 항목의 개수이기 때문에 그 값을 result List에 담아줬다.
int[] answer = new int[result.size()]; // return 값 저장되는 배열
for(int i = 0; i<answer.length; i++) {
answer[i] = result.get(i);
}
result배열의 size를 알 수 있기 때문에 answer배열의 크기도 정할 수 있고, result의 값을 answer배열에 넣어줌으로써 문제 풀이를 완료했다!
👀 후기
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스/Programmers] 괄호 회전하기 (Java - Stack - Lv2) (0) | 2023.01.18 |
---|---|
[프로그래머스/Programmers] 올바른 괄호 (Java - Stack - Level2) (0) | 2023.01.17 |
[프로그래머스/Programmers] 행렬과 연산 (Java - Queue - Level4) (0) | 2023.01.16 |
[프로그래머스/Programmers] [1차] 캐시 (Java - LRU - Level2) (0) | 2023.01.13 |
[프로그래머스/Programmers] 줄 서는 방법 (Java - Level2) (0) | 2023.01.11 |