인프런 커뮤니티 질문&답변

김민준님의 프로필 이미지
김민준

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

다차원 배열 순회 (전반전)

다차원 배열순회 궁금점

해결된 질문

작성

·

378

0

 // 다차원 배열 순회
String[][] seats = new String[][]{
        {"A1", "A2", "A3", "A4", "A5"},
        {"B1", "B2", "B3", "B4", "B5"},
        {"C1", "C2", "C3", "C4", "C5"}
};

for (int i = 0; i < 3; i++) { // 세로
    for (int j = 0; j < 5; j++) { // 가로
        System.out.print(seats[i][j] + " "); //A1 A2 A3...
    }
    System.out.println();

이 부분에서 세로랑 가로의 순서를 바꾸는방법은 없는건가요?

컴퓨터가 세로먼저 계산을 하게 되는건가요?

답변 2

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?
2차원 배열은 { { values #1 }, { values #2 }, { values #3 }, ... } 이런 식으로 구성이 됩니다. values #1, #2, #3 등의 중괄호로 둘러쌓인 데이터들을 또 하나의 중괄호 { } 로 전체를 감싸게 되는 형태인데요. 이때 seats[ A ][ B ] 와 같이 어떤 요소에 접근하려고 하면 A 는 외곽의 중괄호 기준의 인덱스 값이 됩니다. 다시 말해서 1차원 배열이라고 가정하면 { values #1, values #2, values #3 } 의 형태일텐데 이 때 seats[ 0 ] 을 하게 되면 맨 처음에 있는 values #1 에 접근하게 되는 것이죠.
다시 2차원 배열로 돌아와서, seats[ 0 ] 은 이미 values #1 이라는 요소인데 여기 안에서 또 특정 위치의 요소에 접근하고자 한다면 seats[ 0 ][ B ] 와 같이 대괄호 및 인덱스를 넣을 수 있습니다. 그리고 이때 B 는 values #1 가 포함된 중괄호 기준의 인덱스 값이 됩니다. 즉 { { values #1 }, { values #2 }, { values #3 }, ... } 에서 두껍게 칠해진 중괄호 부분이 되는 것이죠. seats[ 0 ][ 1 ] 이라고 하면 { values #1 } 이라는 작은 배열 내의 1 인덱스에 해당하는 값에 접근하게 됩니다.
그래서 보통 우리가 알아보기 편한 형태로, 가령 다음과 같이 2차원 배열을 정의한 그 순서대로 순회하기 위해서 세로 / 가로 순으로 인덱스를 적습니다.

String[][] seats = new String[][]{
        {"A1", "A2", "A3", "A4", "A5"},
        {"B1", "B2", "B3", "B4", "B5"},
        {"C1", "C2", "C3", "C4", "C5"}
};

그리고 다음과 같이 순회했을 때의 값은 위에서 정의할 때와 동일한 순서로 나오게 되죠.

for (int i = 0; i < 3; i++) { // 세로
    for (int j = 0; j < 5; j++) { // 가로
        System.out.print(seats[i][j] + " "); //A1 A2 A3...
    }
    System.out.println();
}
// 실행 결과
A1 A2 A3 A4 A5 
B1 B2 B3 B4 B5 
C1 C2 C3 C4 C5

하지만 꼭 이렇게 해야 하는 것은 아닙니다. 가로와 세로를 바꾸어서 다음과 같이 출력할 수도 있습니다.

// 실행 결과
A1 B1 C1 
A2 B2 C2 
A3 B3 C3 
A4 B4 C4 
A5 B5 C5 

이런 결과를 얻기 위한 순회 코드는 이렇게 작성하시면 됩니다. 편의상 j 를 i 보다 먼저 표기하였습니다.

for (int j = 0; j < 5; j++) { // 가로
    for (int i = 0; i < 3; i++) { // 세로
        System.out.print(seats[i][j] + " "); //A1 B1 C1...
    }
    System.out.println();
}

다차원 배열의 순회에 정해져 있는 것은 아니며 자유롭게 원하는 순서 또는 기준대로 순회할 수 있다는 점 참고해주세요 😊
감사합니다.

0

김민준님의 프로필 이미지
김민준
질문자

함수 그래프에서 보통 가로는 x 세로는 y여서

[x.y] 로 표기하는데 왜 자바에선 seats[세로][가로]로 입력해야하는지 잘 모르겠습니다

김민준님의 프로필 이미지
김민준

작성한 질문수

질문하기