[Java 풀스택 과정 강의] 2월 27일

부트캠프 일지/Java 풀스택 과정 강의
2026.03.02
※ TIL와는 별개로 적는 개인 개발 일지라서 말은 좀 편하게하는 페이지입니다.
일지이기 때문에 일기의 성격이 더 강합니다.

 

 

 

2차원 배열

2차원 배열이란, 배열이 배열을 요소로 가지고 있는 걸 의미한다. 행과 열의 느낌으로 접근한다. 아래 코드 같은 느낌이라 보면 된다.

int[][] arr = new int[3][4];

// → col
0 1 2 3 // ↓ row
4 5 6 7
8 9 10 11

 

배열 초기화

2차원 배열의 경우 1차원과 기본적인 선언은 비슷하다.

 

// 배열 선언
int[][] arr = new int[2][3];
int[][] arr = {{1,2}, {3,4}};
int[][] arr = new int[][]{{1,2}, {3,4}};

 

1차원과 다른 지점은 2차원 배열부분은 당장 선언하지 않아도 된다는 지점. 즉 int[][] arr = new int[2][]; 로 선언해두고, 나중에 arr[1] = new int[3]; 처럼 해도 된다는 것이다. 이에 따라 2차원 배열은 안쪽 배열의 길이가 각각 다를 수가 있다. 초기화 방법의 경우 1차원과 비슷하지만, 일반적으로는 2중 for문을 돌리는 편이다.

 

 

배열 순회

행/열 우선 순회

행 우선 순회란, 행을 고정시키고 열을 순회하는 것을 의미한다. 일반적으로는 이렇게 순회처리한다.

int R = arr.length;
int C = arr[0].length;

	//1. 행(r)을 먼저 고정
    for (int r = 0; r < R; r++) {
   
    	// 2. 열(c)을 순차적으로 방문
        for (int c = 0; c < C; c++) {
        	System.out.printf("%d ", arr[r][c]);
        }
        
    System.out.println(); // 행 변경 시 줄바꿈
}

 

반면 열 우선순회는, 열을 고정시키고 행부터 순회하는 것을 의미한다.

int R = arr.length;
int C = arr[0].length;

	//1. 열(c)을 바깥쪽으로 고정
    for (int c = 0; c < C; c++) {
   
    	// 2. 행(r)을 순차적으로 방문
        for (int r = 0; r < R; r++) {
        	System.out.printf(arr[r][c]);
        }
        
    System.out.println(); // 열 변경 시 줄바꿈
}

 

 

지그재그 순회

지그재그로 순회한다. 짝수라면 왼쪽에서 오른쪽으로, 홀수라면 오른쪽에서 왼쪽으로 순회한다. 핵심은 행 번호(r)가 짝수냐 홀수냐에 따라 열 방향을 바꾸는 것으로, S자 모양으로 배열을 순회하게 된다. 즉, 예를 들어 (0, 9)에서 (1,0)으로 가려면 꽤 오랜 부분을 수정해야하는데, 지그재그를 쓰면 바로 아래인 (1,9)로 내려가 반대로 올 수 있다.

for(int r = 0; r < rows; r++){
    // 짝수 행: 왼쪽 -> 오른쪽 (0, 2, 4 .,)
    if ((r & 1) == 0){
        for(int c = 0; c < cols; c++) {
        	System.out.print(arr[r][c] + " ");
        }
    }
        // 홀수 행: 오른쪽 -> 왼쪽
        else {
            for(int c = cols - 1; c >= 0; c--) {
            	System.out.print(arr[r][c] + " ");
        }
    }
}
// 비트 연산자 (r & 1) 은 (r % 2) 와 동일
// (r & 1) =( 0 : 짝수 (Even)
// (r & 1) =( 1 : 홀수 (Odd)

 

 

달팽이 순회

top, bottom, left, right의 변수를 초기화해 테두리(경계선)에 부딪힐 때까지 순회한다. 그렇게 하면서 경계를 서서히 축소해나가며 경계가 서로 교차할 때까지 반복한다. top <= bottom && left <= right의 조건이 끝나는 순간 순회가 종료되었다고 보면 된다.

 

아래는 자주 사용되는 달팽이 숫자의 핵심 코드다.

        int k = 0;
        int idx = 1;

        int top = 0, bottom = n - 1;
        int left = 0, right = n - 1;

        while(top <= bottom && left <= right){
            for(int c = left; c<= right; c++) { answer[top][c] = idx; idx++; }
            top++;
            for(int r = top; r <= bottom; r++) { answer[r][right] = idx; idx++; }
            right--;
            for(int c = right; c >= left; c--) { answer[bottom][c] = idx; idx++; }
            bottom--;
            for(int r = bottom; r >= top; r--) { answer[r][left] = idx; idx++; }
            left++;
        }

 

 

 

N차원 배열

그 외 3차원 배열도 존재한다. 이 경우에는 xyz라는 3차원의 느낌으로 접근하면 좋다. 2차원과 비슷한 규칙이며, xy, xz, yz라는 게 가능하다는 지점에 유의할 것. 자주 사용되진 않는다.