[Java] Ch05_3. 다차원 배열

토끼는 개발개발·2022년 1월 11일
0

Java

목록 보기
18/32
post-thumbnail
post-custom-banner

📌 Chapter05. 배열


✏️ 3. 다차원 배열


3.1 2차원 배열의 선언과 인덱스

선언 방법

타입[][] 변수이름; 
타입 변수이름[][];
타입[] 변수이름[];
int[][] score = new int[4][3]; // 4행 3열의 2차원 배열을 생성한다.

▶ 2차원 배열의 index

int[][] score = new int[4][3]; // 4행 3열의 2차원 배열 score를 생성
  • 행 index 범위: 0부터 행의길이-1 => 3
  • 열 index 범위: 0부터 열의길이-1 => 2



3.2 2차원 배열의 초기화

1차원 배열보다 괄호{}를 하나 더 써서 행별로 구분해준다.

int[][] arr = new int[][] {{1,2,3}, {4,5,6}};
int[][] arr = {{1,2,3}, {4,5,6}}; // new int[][]가 생략됨

▶ ✨ 예제 1


public class ArrayEx6 {

	public static void main(String[] args) {
		int[][] score = {
				{100, 100, 100}
				, {20, 20, 20}
				, {30, 30, 30}
				, {40, 40, 40}
		};
		int sum = 0;
		
		for(int i=0; i<score.length; i++) {
			for(int j=0; j<score[i].length; j++) {
				System.out.printf("score[%d][%d] =%d%n", i, j, score[i][j]);
			}
		}
		
		for (int[] tmp : score) {
			for (int i : tmp) {
				sum += i;
			}
		}
		
		System.out.println("sum="+sum);
	}

}



3.3 가변 배열

2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 추후에 각기 다른 길이의 배열을 생성함으로써 고정된 형태가 아닌 보다 유동적인 가변 배열을 구성할 수 있다.

int [][] score = new int[3][]; // 두 번째 찯원의 길이는 지정하지 않는다.
score[0] = new int[3];
score[1] = new int[3];
score[2] = new int[2];
// 각 행마다 다른 길이의 배열을 생성하는 것이 가능하다.

▶ 가변 배열의 초기화

가변배열 역시 중괄호{}를 이용해서 다음과 같이 생성과 초기화를 동시에 하는 것이 가능하다.

int[][] score = {
			{100, 100, 100}
            	        , {20, 20, 20}
                	    , {30, 30,}
                };     



3.4 다차원 배열의 활용

▶ 행렬의 곱셈


public class MultiArrEx1 {

	public static void main(String[] args) {
		int[][] m1 = {
				{1, 2, 3},
				{4, 5, 6}
		};
		
		int[][] m2 = {
				{1, 2},
				{3, 4},
				{5, 6}
		};
		
		final int ROW = m1.length; //m1의 행 길이
		final int COL = m2[0].length; // m2의 열 길이
		final int M2_ROW = m2.length; // m2의 행 길이
		
		int[][] m3 = new int[ROW][COL];
		
		// 행렬곱 m1 x m2의 결과를 m3에 저장
		for(int i=0; i<ROW; i++)
			for(int j=0; j<COL; j++)
				for(int k=0; k<M2_ROW; k++)
					m3[i][j] += m1[i][k] * m2[k][j];
		
		// 행렬 m3를 출력
		for(int i=0; i<ROW; i++) {
			for(int j=0; j<COL; j++) {
				System.out.printf("%3d ", m3[i][j]);
			}
			System.out.println();
		}
	}

}



참고서적
자바의 정석(저자: 남궁성)


오늘의 한 줄

지금까지 한 내용 중 배열이 제일 어렵다. 특히 다차원 배열을 활용해 문제를 푸는 부분이 어렵다.
더 많은 연습이 필요할 것 같다. 자바 어느정도 다 나가면 백준으로 연습해야지..
다음 내용부터는 드디어 객체지향 프로그래밍에 들어간다!
파이썬을 공부하면서 겉핥기식으로 공부했었는데 드디어 제대로 공부한다는 생각에 설렌다! 😃

profile
하이 이것은 나의 깨지고 부서지는 기록들입니다
post-custom-banner

0개의 댓글