
이번 문제의 핵심은 어떤 배열 groupSizes 가 주어졌을 때, 알맞은 배열에 다시 재배치하는 문제이다. 문제를 이해하면 어렵지 않지만, List를 이용한 이중 배열을 반환해야 했기에 낯설게 느껴져 List 이중 배열에 대해 검색해보며 문제를 해결했다.

위의 그림처럼 문제를 해결하였고, 해당 그룹안의 사이즈가 초과될 시, 다시 새로운 배열을 생성하고 그 안에 넣어주어야 한다.
그리고 이중 List에 값을 넣어주는 방법은 다음과 같다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
int n = 5; // 예시로 n 값을 5로 설정
List<List<Integer>> answer = new ArrayList<>();
for (int i = 0; i < n; i++) {
List<Integer> arrRowItems = new ArrayList<>();
for (int j = 0; j < n; j++) {
arrRowItems.add(i * n + j);
}
answer.add(arrRowItems);
}
// 2차원 리스트 출력 (디버깅용)
for (List<Integer> row : answer) {
System.out.println(row);
}
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public static List<Integer> arrRowItems;
public List<List<Integer>> groupThePeople(int[] groupSizes) {
List<List<Integer>> answer = new ArrayList<>();
int maxNum = Arrays.stream(groupSizes).max().getAsInt();
for (int i = 0; i < maxNum; i++) {
arrRowItems = new ArrayList<>();
int j = 0;
while (j < groupSizes.length) {
if (groupSizes[j] == i + 1 && !answer.contains(j)) {
if (arrRowItems.size() >= i+1) {
answer.add(arrRowItems);
arrRowItems = new ArrayList<>();
}
arrRowItems.add(j);
}
j++;
}
if (!arrRowItems.isEmpty()) answer.add(arrRowItems);
}
return answer;
}
}


런타임 입장으로 보면 다른 사람들의 비해 시간이 조금 더 걸리는 코드를 짰지만, 메모리 크기 요소를 보았을 때 비교적 적게 소비를 해 나름 나쁘지 않았다고 안도 느낀 것 같다 😮💨