프로그래머스 - 2차원으로 만들기

남궁진 (jinvicky)·2026년 4월 7일

Problem


https://school.programmers.co.kr/learn/courses/30/lessons/120842

Solution


인덱스를 구하는 부분이 가장 어려웠다. 그래서 gpt한테 힌트를 받아서 풀었다.

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에서 다음으로 가져올 인덱스를 생각해보자.

Code


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;
    }
}
profile
문제를 차근차근 하나씩 해결하려고 합니다:)

0개의 댓글