inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

3차원 배열의 인덱스 해석 순서와 3중 반복문 순회 메커니즘에 대해 질문드립니다.

해결된 질문

16

이동훈

작성한 질문수 1

0

안녕하세요 강사님! 강의 잘 듣고 있습니다. 다차원 배열이랑 가변 배열 파트를 복습하다가 인덱스 해석 순서랑 반복문 매칭이 헷갈리는 부분이 생겨서 질문 남깁니다.

강의에서 3차원 배열을 순회할 때 가장 안쪽 루프가 '높이'에 해당한다고 설명해 주셨는데, 제가 직접 코드를 짜서 출력해 보니까 조금 헷갈리는 부분이 있습니다. 제가 테스트해 본 전체 코드는 다음과 같습니다.

public class ArrayTest {
    public static void main(String[] args) {
        int[][][] sheet = new int[2][3][4];
        int count = 1;

        for (int i = 0; i < sheet.length; i++) {         
            for (int j = 0; j < sheet[i].length; j++) {    
                for (int k = 0; k < sheet[i][j].length; k++) { 
                    sheet[i][j][k] = count++;
                }
            }
        }

        for (int i = 0; i < sheet.length; i++) {
            System.out.println("=== [시트 " + i + "] ===");
            for (int j = 0; j < sheet[i].length; j++) {
                for (int k = 0; k < sheet[i][j].length; k++) {
                    System.out.print(sheet[i][j][k] + "\t"); 
                }
                System.out.println();
            }
            System.out.println();
        }
    }
}

이 코드를 실행해 보면 가장 안쪽 루프인 k가 돌 때 숫자가 위로 쌓이는 게 아니라, 왼쪽에서 오른쪽으로 평평하게 가로 줄(열)을 그리면서 출력이 되더라고요. 그리고 가장 바깥쪽 루프인 i가 바뀔 때 시트가 전환되는 것을 확인했습니다.

특히 같이 알려주신 가변 배열(Jagged Array) 개념을 여기에 대입해 보니까 더 헷갈리는데요. 자바는 new int[2][][]; 처럼 각 행마다 열의 크기를 다르게 지정할 수 있는 구조인데, 행마다 방 개수가 제각각인 상황에서 가장 안쪽 루프를 '높이'라고 생각하면 가변 배열의 형태가 머릿속으로 잘 매칭이 안 되어서요.

자바 메모리 구조상 공간적인 높이라는 비유보단, 엑셀로 따지면 처음 게 시트고 두 번째가 행, 마지막이 열이라고 생각하는 게 코드상으로나 가변 배열 구조상으로나 더 자연스러워 보이는데 제가 놓친 디테일이 있을까요?

제가 자바의 다차원 배열 메커니즘을 오해하고 있는 부분이 있는 건지, 아니면 세로-가로-높이 비유를 코드에 대입할 때 제가 놓친 디테일이 있는지 궁금합니다. 확인해 주시면 감사하겠습니다!

java

답변 1

1

나도코딩

안녕하세요, 동훈님?

세상에!!!!!!!

정말 죄송합니다. 치명적인 오류가 있었네요 😱

다차원 배열은 (세로 x 가로 x 높이) 가 아니라 (높이 x 세로 x 가로) 순서가 맞습니다.

말씀하신 것처럼 엑셀로 따지면

- 가장 바깥쪽 i : 시트 (높이)

- 중간 j : 행 (세로)

- 가장 안쪽 k : 열 (가로)

가 맞습니다.

강의를 촬영할 시점에 제가 순서를 잘못 작성하였던 것입니다.

혼란을 드려 대단히 죄송하며, 일깨워주셔서 감사합니다.

해당 강의 동영상의 공지사항으로 정정 안내하도록 하겠습니다.


GPT 의 도움을 받아 아래 그림으로 그려보았습니다.

이해에 도움되셨으면 합니다.

다차원배열.png.webp

감사합니다.

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

176

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

139

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

91

1

사고력 키우는 법이 어떤게 있나요?

0

114

2

getter setter

0

117

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

92

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

92

2

변수 이름짓는법

0

126

2

intelli J 실행오류

0

127

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

169

2

영상이 재생이 안됩니다.

0

177

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

124

2

응용이 어렵습니다.

0

219

2

IntelliJ가 보이지 않습니다.

0

203

3

JDK 버전 문의

0

135

2

BlackBox 파일 내에서 메소드 정의

0

141

1

동기화

0

131

2

Iterator 문의

0

109

1

코드 순서 문의

0

147

1

클래스 메소드

0

157

2

Quiz_05 관련 질문드립니다 !

0

126

2

다운로드가 안됩니다

0

171

2

다형성

0

126

2

HashMap

0

87

2