3층 1구역 - 개발의 장/JAVA

JAVA - array 다차원 배열 : 2차원 배열 -- 02(2022-07-20)

상이태상 2022. 7. 21. 00:11

1.가변길이 배열??

이전에 2차원 배열 설명하면서 아주 예쁜 바둑판 형식의 2차원 배열만 소개했었다.

(아주 전형적인 호텔)

 

이번 2차원 배열은 층(행) 당 방의 개수(열)가 아주 자기주장이 강하다.

 

그래서 적어도 필자는 이런 배열을 가변길이 배열 이라고 부르기로 했다.

 

가변길이 배열은 어떤 arr<0x100>이란 주소를 갖고 찾아왔는데 위 그림처럼 복합건물이 있다고 이해하고자 한다.

arr[0]에 배열의 수는 10개

arr[1]에 배열의 수는 5개 이런 식으로 각각의 배열의 수를 갖고 있는 arr[n]라는 배열이 층(행)을 이뤄 하나의 건물을 만든다.

 

백화점 같은데 가보면 각각의 층마다 입점하고 있는 매장의 개수가 다르다는 걸 연상하면 어떤 느낌인지 쉽게

이해할 듯 하다.

 

예시로 알아보자.

 

2. 예제

package arrays_0720;

public class Ex10 {

	public static void main(String[] args) {
		int arr[][] = new int[][] {
			{10,20,30,40},
			{50,60},
			{70,80,90,100,110},
			{120}
		};
		System.out.println("행의 수 : " + arr.length);
		System.out.println("칸의 수 : " + arr[0].length);
		System.out.println("칸의 수 : " + arr[1].length);
		System.out.println("칸의 수 : " + arr[2].length);
		System.out.println("칸의 수 : " + arr[3].length);

		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}

}

다음 코드를 출력하면?

 

행의 수 : 4 >>>> 총 4층의 백화점
칸의 수 : 4 >>>> arr[0]층에 입점한 매장 4개
칸의 수 : 2 >>>> arr[1]층에 입점한 매장 2개
칸의 수 : 5 >>>> arr[2]층에 입점한 매장 5개
칸의 수 : 1 >>>> arr[3]층에 입점한 푸드코트(?)

 

10 20 30 40 >>>> arr[0]층에 입점한 매장
50 60 >>>> arr[1]층에 입점한 매장
70 80 90 100 110 >>>> arr[2]층에 입점한 매장 5개
120 >>>> arr[3]층에 입점한 푸드코트(?)

 

다음은 직접 행을 생성하고, 각 행에 배열을 만들어보자.

package arrays_0720;
import java.util.Scanner;

public class Ex11 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("몇 행의 배열을 만드시겠습니까? : ");

		int length = input.nextInt();
		int[][] arr = new int[length][];

		System.out.println("각 행에 배열을 만드세요!");
		for (int i = 0; i < arr.length; i++) {
			System.out.print(i + 1 + "번째 행의 배열 : ");
			int n = input.nextInt();
			arr[i] = new int[n];
		}

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

		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}
}

 

결과

 

몇 행의 배열을 만드시겠습니까? : 4
각 행에 배열을 만드세요!
1번째 행의 배열 : 6
2번째 행의 배열 : 5
3번째 행의 배열 : 2
4번째 행의 배열 : 3
0 1 2 3 4 5 
0 1 2 3 4 
0 1 
0 1 2