728x90
3차원 배열 전체 코드
public class ThreeDimensionArray {
public static void main(String[] args) {
int[][][] intArr = {
{ // [0][][]
{1, 3}, // [0][0][]
{5, 6, 7, 8}, // [0][1][]
{9, 10, 11, 12} // [0][2][]
},
{ // [1][][]
{13, 14, 15, 16}, // [1][0][]
{17, 18, 19 }, // [1][1][]
{21, 22, 23, 24} // [1][2][]
}
};
System.out.println(intArr[0][0][1]); // 2
System.out.println(intArr[0][1][2]); // 8
System.out.println(intArr[1][2][1]); // 22
System.out.println(intArr[1][0][3]); // 16
for (int[][] i : intArr) {
for(int[] j : i){
for (int z : j) {
System.out.println(z);
}
}
}
for(int i = 0; i < intArr.length; i++){
for (int j = 0; j < intArr[i].length; j++) { // 해당 자리의 길이를 알아내줘야한다.
for (int z = 0; z < intArr[i][j].length; z++) { // 해당 자리의 길이를 알아내줘야한다.
System.out.print(intArr[i][j][z] + " ");
}
System.out.println();
}
System.out.println();
}
}
}
3차원 배열의 선언
int[][][] intArr = {
{ // [0][][]
{1, 3}, // [0][0][]
{5, 6, 7, 8}, // [0][1][]
{9, 10, 11, 12} // [0][2][]
},
{ // [1][][]
{13, 14, 15, 16}, // [1][0][]
{17, 18, 19 }, // [1][1][]
{21, 22, 23, 24} // [1][2][]
}
};
주석을 보면 해당 자리의 인덱스를 확인할 수 있다.
3차원 배열의 출력
System.out.println(intArr[0][0][1]); // 2
System.out.println(intArr[0][1][2]); // 8
System.out.println(intArr[1][2][1]); // 22
System.out.println(intArr[1][0][3]); // 16
선언 후 첫 대괄호는 3차원 배열의 첫 인덱스이다. arr[0][][]
대괄호 안의 첫 대괄호는 첫 인덱스의 첫 인덱스이다. arr[0][0][]
대괄호 안의 데이터의 인덱스는 차례대로 숫자가 들어난다. arr[0][0][0] ~ [0][0][length]
중첩 for문
for(int i = 0; i < intArr.length; i++){
for (int j = 0; j < intArr[i].length; j++) { // 해당 자리의 길이를 알아내줘야한다.
for (int z = 0; z < intArr[i][j].length; z++) { // 해당 자리의 길이를 알아내줘야한다.
System.out.print(intArr[i][j][z] + " ");
}
System.out.println();
}
System.out.println();
}
for문의 조건을 가장 신경써야한다.
중첩될때마다 배열의 길이를 해당 인덱스의 길이로 계속 갱신해야한다.
배열의 길이가 [3][3][3]이라고 선언하였어도 모든 값이 해당 크기에 모두 들어가있으리라는 보장이 없다.
전체 코드에서 볼 수 있듯이 길이가 2~4까지 다양하므로 길이가 변동될 수 있기 때문이다.
향상된 for문
for (int[][] i : intArr) {
for(int[] j : i){
for (int z : j) {
System.out.println(z);
}
}
}
중첩 for문과 달리 알아서 그 배열의 크기만큼 반복하므로 하나하나 신경쓸 필요가 없다는 것을 알 수 있다.
중첩 for문을 잘 이해했다면 해당 for문을 사용하는 것이 편리할 것 같다.
인터넷 강의, 교재 등 다양한 곳에서 3차원 배열, 다차원 배열의 존재를 알고 있었으나
설마 내가 저 배열을 쓸 일이 있을까? 하는 생각에 계속해서 공부하지 않고 넘겼었다.
하나하나 놓치지 않고 공부하기 위해 이번에 자료구조에 대해 다시 공부하며 배열 부분을 펴게 되었다.
그 중에서도 매번 넘겼던 3차원 배열을 사용해봤는데, 한 번도 사용해보지 않고, 실습하지 않고 넘어갔으면
코테등 시간이 부족하고 마음의 여유가 부족할 때 조금은 허둥지둥하지 않았을까 생각한다.
중첩 for문의 length에 대해 생각하고, 배열의 크기에 대해 항상 생각하자.
반응형
'CS > 자료구조' 카테고리의 다른 글
[자료구조] 링크드리스트(Linkde List) (0) | 2022.10.20 |
---|---|
[자료구조] 큐(Queue) (0) | 2022.10.19 |
[자료구조] 스택(Stack) (0) | 2022.10.19 |
[자료구조] 배열 (Array), ArrayList, LinkedList (1) | 2022.10.15 |