Java/Daily-Java

[Array] 2차원 배열 응용

모모토 2021. 4. 13. 01:20

● 2차원 배열을 이용하여 다음의 결과를 출력해보자

 

실행결과 각행의 맨 우측은 각행의 합, 맨 아래는 각 열의 합, 6행 4열 은 전체 성분의 합

 

Result↓

 

100 100 100 300 

  20  20  20  60

  30  30  30  90

  40  40  40 120

  50  50  50 150

240 240 240 720

 


다시 한번 생각해봐도 잘 모르겠으면 일단 손으로 써보면서 생각해보자, 손으로 프로그래밍의 동작 순서를 가시화하면서 공부하는 게 생각보다 많이 괜찮다.

 

1) 2차 배열을 구상하자

 

 

 

빨간색은 주어진 배열이고 파란색은 합과 동시에 빨간색 배열을 옮겨 넣을 배열이다. 배열의 확장

 

이러한 아이디어가 떠오르지않는다면 그냥 이런 문제를 머리에 유형화를 시켜두는 게 정신건강에 좋다

 

2) 실행순서

 

우선 생각의 편의를 위해서 Arr의 값을 Arr2로 입력한다 , ( 코드 : Arr2 [i][j] = Arr [i][j] ; )

 

실행 순서를 생각해보자 우선, 첫 번째 행(Arr [0])의 합을 구해보면  

 

Arr2 [0][0] + Arr2 [0][1] + Arr2 [0][2] = Arr2 [0][3]   -> i=0 일 때

 

변하지 않는 값 0을 i로 두고 변하는 값을 j로 두면, for문의 중첩을 예상할 수 있다. 그렇다면 열의 합은?

 

Arr2 [0][0] + Arr2 [1][0] + Arr [2][0] + Arr [3][0] + Arr [4][0] = Arr2 [5][0]

 

Arr2 [0][1] + Arr2 [1][1] + Arr [2][1] + Arr [3][1] + Arr [4][1] = Arr2 [5][1]

 

Arr2 [0][2] + Arr2 [1][2] + Arr [2][2] + Arr [3][2] + Arr [4][2] = Arr2 [5][0]

 

   i=0일 때

 

i = 0 일 때 어떤 식으로 프로그램이 돌아야 원하는 결과를 달성할 수 있는지에 대하여 초점을 맞춰야 한다.

 

계산이 중요한 게 아니다 i = 0일 때의 계산을 그림으로 그려 보면 다음과 같다.

 

 

 

 

두 가지 for 문의 진행방향이다. 총횟수는 i번 i = 0일 때 한 행의 합을 구하고 각 열의 끝에는  각열에 더해야 할 값들의 첫 번째 값을 넣어주면서 i-for 문의 진행에 따라 순차적으로 합해진다. 다시 말하면 i-for문이 한번 돌 때 한 행의 합이 구해지고 각열의합은 i-for문이 Arr2.length만큼 반복하고 끝마칠 때 구해진다는 말! 이것을 for문으로 구현하면 다음과 같다.

 

for (int i = 0; i < score.length; i++) {
	for (int j = 0; j < score[i].length; j++) {					
		result[i][j]=score[i][j];
		result[i][score[0].length] += result[i][j];
		result[score.length][j] += result[i][j];
		result[score.length][score[0].length] += result[i][j]; // 모든 배열의 합
	}
}

Answer

 

 

public static void main(String[] args) {
		int[][] Arr = {
				{100, 100, 100}
				, {20, 20, 20}
				, {30, 30, 30}
				, {40, 40, 40}
				, {50, 50, 50}
				};
				int[][] Arr2 = new int[Arr.length + 1][Arr[0].length + 1];
				for (int i = 0; i < Arr.length; i++) {
					for (int j = 0; j < Arr[i].length; j++) {
						
						Arr2[i][j]=Arr[i][j];
						Arr2[i][Arr[0].length] += Arr2[i][j];
						Arr2[Arr.length][j] += Arr2[i][j];
						Arr2[Arr.length][Arr[0].length] += Arr2[i][j];
						
						
					}
				}
				for (int i = 0; i < Arr2.length; i++) {
					for (int j = 0; j < Arr2[i].length; j++) {
						System.out.printf("%4d", Arr2[i][j]);
					}
					System.out.println();
				}

	}