Programming/Java

자바의 다차원 배열

vita12321 2023. 7. 26. 13:54
728x90
반응형

자바에서 다차원 배열은 데이터를 행렬 형태로 표현하고 관리할 때 필수적인 요소입니다. 이를 이용하면 높은 차원의 데이터 구조를 쉽게 나타낼 수 있으며, 코드를 효율적으로 작성하고 관리할 수 있습니다. 이번 글에서는 자바에서 사용되는 다차원 배열에 대해 상세하게 알아보고, 예제 코드를 통해 기능을 이해해 보겠습니다.

 


1. 다차원 배열의 개념

다차원 배열은 2차원, 3차원 등 다양한 차원의 데이터를 배열로 표현할 수 있게 해줍니다. 배열의 각 요소 또한 배열이므로, 좌표 평면, 공간 좌표 등 다양한 형태의 데이터를 저장하고 처리할 수 있습니다.

 

예를 들어, 지도의 좌표를 저장하려면 2차원 배열을 사용하여 각 지점의 x, y 좌표를 나타낼 수 있습니다. 또한, 각 좌표에 대한 높이 정보를 포함하려면 3차원 배열을 사용하여 x, y, z 값을 저장할 수 있습니다.

 


2. 다차원 배열 선언 및 초기화

자바에서 다차원 배열을 선언하는 방법은 '타입[][]'의 형태로 지정합니다. 다음 예제는 정수형 2차원 배열을 선언하고 인스턴스를 생성하는 예입니다.

int[][] matrix = new int[3][3];

이 외에도, 다차원 배열을 선언하면서 동시에 각 요소의 값을 초기화할 수 있습니다. 중괄호를 사용해 각 요소를 알맞은 값으로 설정할 수 있습니다. 아래 예제는 3x3 행렬에 값을 초기화하는 예입니다.

int[][] matrix = {

    {1, 2, 3},

    {4, 5, 6},

    {7, 8, 9}

};

 


3. 다차원 배열 요소에 접근

다차원 배열의 요소에 접근할 때는 인덱스를 사용해 특정 위치의 데이터를 읽거나 변경할 수 있습니다. 이 때 인덱스는 0부터 시작하며, 대괄호를 사용하여 다차원 배열의 각 차원에 대한 인덱스를 명시합니다. 다음 예제는 3x3 행렬에서 특정 위치의 값을 변경하는 예입니다.

matrix[0][1] = 42;

 


 

4. 다차원 배열 순회

다차원 배열의 요소를 순회할 때는 반복문을 사용합니다. for문이나 for-each를 사용하여 배열의 각 요소에 접근할 수 있습니다. 특히, 다차원 배열에서는 for문을 중첩해서 사용하여 각 차원의 모든 요소를 순회할 수 있습니다. 아래 예제는 3x3 행렬의 모든 요소를 출력하는 예입니다.

 

for (int i = 0; i < matrix.length; i++) {

    for (int j = 0; j < matrix[i].length; j++) {

        System.out.print(matrix[i][j] + " ");

    }

    System.out.println();

}

 

 

5. 다차원 배열 예제

다음 예제는 1부터 9까지의 숫자를 3x3 행렬에 저장하고, 전체 합을 계산하는 예제입니다.

 

int[][] matrix = {

    {1, 2, 3},

    {4, 5, 6},

    {7, 8, 9}

};

int sum = 0;

 

for (int i = 0; i < matrix.length; i++) {

    for (int j = 0; j < matrix[i].length; j++) {

        sum += matrix[i][j];

    }

}

System.out.println("3x3 행렬의 합: " + sum);

6. 다양한 방법으로 배열을 선언하고 사용하는 예제

 

  • 서로 다른 행의 배열 크기를 가진 2차원 배열 (비정방형 배열)

    자바에서는 각 행이 서로 다른 길이의 배열을 가질 수 있는 비정방형 배열을 지원합니다. 다음 예시와 같이 각 행에 대해 배열의 크기를 지정하여 선언하거나 초기화할 수 있습니다.
int[][] matrix = new int[3][];

matrix[0] = new int[2];

matrix[1] = new int[4];

matrix[2] = new int[3];

 

// or use this shorthand

int[][] matrix = {

    {1, 2},

    {3, 4, 5, 6},

    {7, 8, 9}

};

  • 이중 배열을 사용하여 매트릭스 연산 구현하기

    덧셈과 곱셈과 같은 매트릭스 연산을 수행하는 코드를 구현할 수 있습니다. 아래 예제는 두 행렬의 곱셈을 수행하는 예제입니다.
int[][] matrixA = {

    {1, 2},

    {3, 4}

};

 

int[][] matrixB = {

    {5, 6},

    {7, 8}

};

 

int[][] result = new int[matrixA.length][matrixB[0].length];

 

for (int i = 0; i < matrixA.length; i++) {

    for (int j = 0; j < matrixB[0].length; j++) {

        for (int k = 0; k < matrixA[0].length; k++) {

            result[i][j] += matrixA[i][k] * matrixB[k][j];

        }           

    }

}

 

// 출력

for (int i = 0; i < result.length; i++) {

    for (int j = 0; j < result[0].length; j++) {

        System.out.printf("%4d", result[i][j]);

    }

    System.out.println();

}

이 예제에서 두 2x2 행렬의 곱셈을 수행한 결과는 다음과 같습니다.

  19  22

  43  50

  • 지그재그 형태로 순회하기

    다양한 순회 방식을 사용하여 다차원 배열을 출력할 수 있습니다. 이 예제에서는 지그재그 형태로 순회하여 출력하는 방식을 사용합니다.
int nRows = 5, nCols = 4;

int[][] zigzag = new int[nRows][nCols];

 

for (int i = 0; i < nRows; i++) {

    for (int j = 0; j < nCols; j++) {

        zigzag[i][j] = i * nCols + j + 1;

    }

}

 

for (int i = 0; i < nRows; i++) {

    if (i % 2 == 0) {

        for (int j = 0; j < nCols; j++) {

            System.out.printf("%2d ", zigzag[i][j]);

        }

    } else {

        for (int j = nCols - 1; j >= 0; j--) {

            System.out.printf("%2d ", zigzag[i][j]);

        }

    }

    System.out.println();

}



출력:

 1  2  3  4

 8  7  6  5

 9 10 11 12

16 15 14 13

17 18 19 20

 

 

결론적으로, 자바에서 다차원 배열을 사용하면 높은 차원의 데이터 구조를 쉽게 표현하고 관리할 수 있습니다. 이를 통해 좀 더 복잡한 데이터를 효과적으로 처리하는 알고리즘을 구현하고, 효율적인 프로그램 개발이 가능해집니다. 

728x90
반응형