Backend/Java

Java 문법 2주차 2-13 다차원 배열

chillmyh 2023. 11. 22. 17:49

2-13

다차원 배열

 1. 2차원 배열(2열 배열), 순회

 

선언방법

int[][] array

int array[][]

int[] array[]

 

 

생성 -> 생성도 대괄호 하나 더 추가하면 됨.

int[][] array = new int[][];

[][] 에서 []은 방번호, 뒤의 []는 앞 방의 크기 라고 이해하면 쉬웠다.

 

2차원 배열 초기화 방법

  1. 중괄호로 값을 지정하여 선언과 동시에 초기화

// 중괄호를 사용해 초기화

int[][] array = {
{1, 2, 3},
{4, 5, 6}
};

 

  2. 선언/생성 후 반복을 통한 초기화

package week02.array;

public class Arr06 {
    public static void main(String[] args) {
        // 반복문을 통한 초기화

        int[][] array = new int[2][3]; // 최초 선언

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.println("출력값 => " + i + ", " + j);
                array[i][j] = 0;  // i, j 는 위 노란색 네모박스 안에있는 숫자를 의미하며 인덱스 라고 부름.

                }
            }
        }
    }

 

정확히 이해 안됐던 부분

for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array[i].length; j++) {
        System.out.println("출력값 => " + i + ", " + j);
        array[i][j] = 0;  // i, j 는 위 노란색 네모박스 안에있는 숫자를 의미하며 인덱스 라고 부름.

        }

에서 2번째 줄의 array[i].length; 와 4번째줄의 array[i][j] = 0;

GPT와 팀원들에게 질문하여 이해한 바로는

 

j < array[i].length; 는 일단 위의 전체 코드에서

int[][] array = new int[2][3];

으로 선언/생성을 했으므로 예를들어

{

{o, o} {o,o} {o,o}

{o ,o} {o,o} {o,o}

}

으로 2차원 배열이 생성이 될텐데 j < array[i].length; 라는 조건문은

j를 array의 i(index크기->i행) 만큼 길이까지 동안

으로 이해했다.

array[i][j] = 0; 은 for문을 통한 초기화 방법을 설명한 코드였으므로 배열 내의 값들을 0으로 초기화 한것으로 이해했다. <-이부분은 매니저님께 질문 후 다시 알아보는 걸로.. 

-> 

매니저님께 설명을 들었다.

j < array[i].length; 부분은 내가 맞게 이해했고

array[i][j] = 0; 은 그냥 for문 안에서 초기화 하는 방법의 하나로 가볍게 이해하면 된다고 하셨다.

추가로, for문이든 중괄호를 통해 값을 바로 지정해 초기화를 하던 처음 선언당시에는 무조건 초기값으로 설정된다고 알려주셨다.

 

2. 가변배열

package week02.array;

public class Arr07 {
    public static void main(String[] args) {
        // 가변배열
        int[][] array = new int[3][];

        // 배열 원소마다 각기 다른 크기로 지정
        array[0] = new int[2]; // 0번째 행의 크기(열)는 2. ex. {0, 0}, {0, 1}
        array[1] = new int[4]; // 1번재 행의 크기(열)는 4. ex. {1, 0}, {1, 1}, {1, 2}, {1, 3}
        array[2] = new int[1]; // 2번째 행의 크기(열)는 1. ex. {2, 0}

        // 중괄호로 초기화를 아예 해버릴 때도 가능함
        int[][] array2 = {
                {10, 20},
                {10, 20, 30, 40},
                {10},
        };
    }
}

 

 

3. 2차원 배열 이상의 다차원 배열 이해

 - 2차원 배열 외에도 3,4,5차원 등이 있지만 대부분 3차원까지만 사용

 - 3차원 배열

     ex. int[][][] multiArray = { { {1, 2}, {3, 4} }, { {5, 6}, {7, 8} } };

 

4. 다차원 배열 조회

int[][] array = {
        {10, 20, 30},
        {10, 20, 30, 40},
        {10, 20}
};

for (int i = 0; i < array.length; i++) { // 1차원 길이
    for (int j = 0; j < array[i].length; j++) { // 2차원 길이
        System.out.println(array[i][j]); // 2중 반복문으로 i, j 인덱스 순회
    }
}

 

출력

10

20

30

10

20

30

40

10

20

-> i, j의 위치마다 돌아가며 값을 출력한 것

 

최대값 구하기

package week02.array;

public class Arr08 {
    public static void main(String[] args) {
        // 최대값 구하기
        int[] arr = {3, 2, 1, 5, 1};

        // 최대값 초기화 세팅
        int max = arr[0]; // 3이지만 임의로 최대값이라고 세팅

        // 최대값 구하기 로직
        for (int num: arr) { // int num에 3, 2, 1, 5, 1으로 돌아가는 동안
            if (num > max) { // num이 max보다 커지면
                max = num; // max를 num으로 바꿔줘
            }
        }

        System.out.println("최대값은 => " + max); // 최대값은 => 5
    }
}