원래는 스택/큐 문제지만, 굳이 안써도 될것같아서 안쓰고 한번 풀어봤다.(그래서 엄청 오래걸렸다.)
ㅇ 1트
public static int[] solution(int[] progresses, int[] speeds) {
//몇번 더해야하는지를 넣는 배열생성한다.
int[] addTo100 = new int[progresses.length];
//100까지 몇번더하는지 구해서 addTo100 배열에 넣는다.
for (int i = 0; i < progresses.length; i++) {
int target = 100 - progresses[i];
addTo100[i] = (int) Math.ceil((double) target / speeds[i]);
}
//answer에 넣기 전, 그룹을 지어서 갯수를 세줄 새배열을 만든다.
List<Integer> answerList = new ArrayList<>();
//addTo100 배열만큼 반복
for (int i = 0; i < addTo100.length; i++) {
int count = 1;
int current = addTo100[i];
//i는 addTo100길이-1 && 현재가 다음인덱스보다 크거나같으면 count++
while (i < addTo100.length - 1 && current >= addTo100[i + 1]) {
count++;
i++;
current = addTo100[i];
}
answerList.add(count);
}
int[] answer = new int[answerList.size()];
for (int i = 0; i < answerList.size(); i++) {
answer[i] = answerList.get(i);
}
return answer;
}
먼저 각progresses의 인덱스가 며칠이 걸리는지를 addTo100 배열에 넣었다.
그 다음 addTo100 배열에서 규칙을 찾아 길이가 자유로운 ArrayList인 answerList에 넣고 다시 int 배열인 answer에 넣었다.
그런데 내가 간과한것이, addTo100 배열이 {10,3,2,1} 일땐 맞겠지만, {10,2,3,1} 이면 2와 3을 비교해 그룹을 자른다는것이었다.
그래서 addTo100으로 다시 어떻게 그룹화할지를 수정했다.
ㅇ 2트
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
//몇번 더해야하는지를 넣는 배열생성한다.
int[] addTo100 = new int[progresses.length];
//100까지 몇번더하는지 구해서 addTo100 배열에 넣는다.
for (int i = 0; i < progresses.length; i++) {
int target = 100 - progresses[i];
addTo100[i] = (int) Math.ceil((double) target / speeds[i]);
}
//addTo100 배열을 다시 규칙에따라 answerList생성
List<Integer> answerList = new ArrayList<>();
int count = 0;
int max = addTo100[0];
for (int i = 0; i < addTo100.length; i++) {
if (max >= addTo100[i]) {
count++;
} else {
answerList.add(count);
max = addTo100[i];
count = 1;
}
}
answerList.add(count);
//ArrayList인 answerList를 다시 int[] answer로 변환
int[] answer = new int[answerList.size()];
for (int j = 0; j < answerList.size(); j++) {
answer[j] = answerList.get(j);
}
return answer;
}
}
max를 만들어서 다음원소와 비교해가면서 max가 더 작은경우 max를 해당하는 원소로 교체하고 이전에 그룹을 answerList에 넣는 방법을 사용했다. (이 부분구현하는데 거의 2시간 걸린듯하다.)
이 쉬운문제를 엄청나게 오래 풀었다. 정말 반성해야겠다.