
https://school.programmers.co.kr/learn/courses/30/lessons/120842
인덱스를 구하는 부분이 가장 어려웠다. 그래서 gpt한테 힌트를 받아서 풀었다.
지금 코드에서 핵심 문제는 이거야:
👉 part[j] = num_list[i];
여기서 i만 쓰고 있어서 같은 값만 계속 들어가고 있음. -> 풀기 전 내 코드의 문제였다.
생각해야 할 포인트 👇
num_list는 1차원 배열이고
answer는 n개씩 끊은 2차원 배열
👉 즉, "원래 배열의 몇 번째 인덱스를 가져와야 하는가?"가 핵심
힌트 💡
i는 "몇 번째 묶음인가"
j는 "묶음 안에서 몇 번째인가"
👉 그러면 원래 배열 인덱스는 이렇게 만들어야겠지?
(묶음 시작 위치) + (묶음 내부 위치)
조금 더 직관적으로:
0번째 묶음 → 0,1,2
1번째 묶음 → 3,4,5
2번째 묶음 → 6,7,8
👉 규칙 보이지?
처음에는 i+j로 단순하게 생각했다가 묶음에 따라서 접근해야 할 i가 달라지므로 n이 영향을 미친다는 사실을 파악했다.
그래서 최종적으로 아래와 같이 part[]에 들어갈 인덱스를 추정했고 성공했다.
int idx = i * n + j;
묶음을 생각해서 num_list에서 다음으로 가져올 인덱스를 생각해보자.
class Solution {
public int[][] solution(int[] num_list, int n) {
int[][] answer = new int[num_list.length / n][n];
for(int i = 0; i < num_list.length / n; i++) {
int[] part = new int[n];
for(int j = 0; j < n; j++) {
int idx = i * n + j; // 체크.
part[j] = num_list[idx];
}
answer[i] = part;
}
return answer;
}
}