본문 바로가기
자격증·공부 아카이브/Java 기초

Java 2차원 배열 완전정리: 세로·지그재그 채우기와 90도 회전

by 쑥쑥자라나라 2026. 8. 5.
728x90

Java 2차원 배열 문제는 숫자를 외워 넣는 문제가 아니라 행과 열 중 어느 방향을 먼저 움직이는지를 설계하는 문제다. 세로 채우기, 지그재그 채우기, 왼쪽 90도 회전을 좌표 변화로 읽어 보자.

먼저 적을 것: 출력 좌표 [row][col]에 어떤 입력 좌표 또는 몇 번째 숫자가 들어가는가?

5×5 격자를 세로·지그재그로 채우고 왼쪽으로 90도 회전하는 좌표 변화

1. arr[row][col]에서 바깥 반복문을 결정한다

패턴 먼저 움직이는 축 핵심 좌표
가로 채우기 행 고정, 열 증가 arr[row][col]
세로 채우기 열 고정, 행 증가 arr[row][col]
회전 출력 좌표 기준 입력의 열·행 교환

배열 저장 순서와 화면 출력 순서는 다를 수 있다. 채우기 코드는 패턴을 만들고, 출력 코드는 항상 행을 위에서 아래로 읽는다고 나눠 생각하면 덜 헷갈린다.

2. 숫자를 열 방향으로 채우기

static int[][] fillByColumn(int n) {
    int[][] board = new int[n][n];
    int value = 1;

    for (int col = 0; col < n; col++) {
        for (int row = 0; row < n; row++) {
            board[row][col] = value++;
        }
    }
    return board;
}

원문 12는 arr[j][i]로 열을 먼저 고정했다. 변수명을 row, col로 바꾸면 왜 인덱스 순서가 뒤집혀 보였는지 분명해진다.

728x90

3. 짝수 행은 오른쪽, 홀수 행은 왼쪽

static int[][] fillSnake(int n) {
    int[][] board = new int[n][n];
    int value = 1;

    for (int row = 0; row < n; row++) {
        if (row % 2 == 0) {
            for (int col = 0; col < n; col++) {
                board[row][col] = value++;
            }
        } else {
            for (int col = n - 1; col >= 0; col--) {
                board[row][col] = value++;
            }
        }
    }
    return board;
}

원문 14의 핵심은 행의 홀짝이다. 숫자 value는 항상 증가하지만 열 인덱스의 진행 방향만 바뀐다.

4. 왼쪽으로 90도 회전하기

static int[][] rotateLeft(int[][] source) {
    int rows = source.length;
    int cols = source[0].length;
    int[][] rotated = new int[cols][rows];

    for (int row = 0; row < rows; row++) {
        for (int col = 0; col < cols; col++) {
            rotated[cols - 1 - col][row] = source[row][col];
        }
    }
    return rotated;
}

정사각형만 가정하지 않고 행과 열이 다른 배열도 처리한다. 원본 [row][col]은 왼쪽 회전 후 [cols - 1 - col][row]로 이동한다.

5. 실수하기 쉬운 부분

모든 반복 조건에 arr.length를 쓴다

직사각형 배열의 열 길이는 arr[row].length다. 행과 열 크기를 따로 저장한다.

채우기와 출력을 한 반복문에서 해결한다

패턴이 복잡해지면 저장을 끝낸 뒤 별도 메서드로 출력하는 편이 좌표를 검증하기 쉽다.

회전 방향을 눈으로만 판단한다

왼쪽 위, 오른쪽 위 같은 모서리 하나가 어디로 이동해야 하는지 좌표를 대입해 확인한다.

핵심 요약
  • 행과 열 중 어느 축을 먼저 움직일지 정한다.
  • 지그재그는 숫자보다 열 진행 방향만 바꾼다.
  • 왼쪽 회전 좌표는 [cols-1-col][row]다.
  • 직사각형 배열에서는 행·열 길이를 구분한다.
728x90