본문 바로가기

알고리즘 연습/2차원 배열

[백준 JAVA] 2738번 - 행렬 덧셈

[문제]

N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.

 

* 입력 : 첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.

* 출력 : 첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.

 

[풀이]

1.  입력받을 행렬의 크기를 지정하기 위해 변수 선언 및 입력을 받음

int n = sc.nextInt();
int m = sc.nextInt();

2. 2개의 행렬을 더하는 것이기 때문에 2개의 행렬을 선언 및 입력받음

int[][] a = new int[n][m];
int[][] b = new int[n][m];
for(int i = 0; i<n; i++){ //첫번째 행렬 입력받기
	for(int j = 0; j<m; j++){
		a[i][j] = sc.nextInt();
	}
}
for(int i = 0; i<n; i++){ //두번째 행렬 입력받기
	for(int j = 0; j<m; j++){
		b[i][j] = sc.nextInt();
	}
}

3. 입력받은 후 결과값을 저장할 배열을 선언 및 값을 저장함 (배열을 저장하지 않고 값을 바로바로 출력해도 문제 없음; 필자는 전자와 같이 코드를 짬)

추가적으로 각 값 사이에 공백이 필요하기 때문에 공백 주의하여 출력 필요함

int[][] result = new int[n][m];
for(int i = 0; i<n; i++){
	for(int j = 0; j<m; j++){
		result[i][j] = a[i][j]+b[i][j];
		System.out.print(result[i][j]+" ");
	}
    System.out.println(""); 
}

 

[최종코드]

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();
        int m = sc.nextInt();
        
        //a, b 행렬 입력 받기
        int[][] a = new int[n][m];
        int[][] b = new int[n][m];
        for(int i = 0; i<n; i++){
            for(int j = 0; j<m; j++){
                a[i][j] = sc.nextInt();
            }
        }
        for(int i = 0; i<n; i++){
            for(int j = 0; j<m; j++){
                b[i][j] = sc.nextInt();
            }
        }
        
        int[][] result = new int[n][m];
        for(int i = 0; i<n; i++){
            for(int j = 0; j<m; j++){
                result[i][j] = a[i][j]+b[i][j];
                 System.out.print(result[i][j]+" ");
            }
            System.out.println(""); 
        }
        
    }
}

 

 

'알고리즘 연습 > 2차원 배열' 카테고리의 다른 글

[백준 JAVA] 2563번 - 색종이  (0) 2022.11.27
[백준 JAVA] 2566번- 최댓값  (0) 2022.10.27