Algorithm/Baekjoon(Java)

[백준/JAVA] 2738 : 행렬 덧셈 (2차원 배열)

비망노트 2022. 12. 5. 21:39
문제

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

입력

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다.

이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고,

행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.

출력

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

 

 

예제입력 예제출력
3 3
1 1 1
2 2 2
0 1 0
3 3 3
4 4 4
5 5 100
4 4 4
6 6 6
5 6 100

 

⭕ 풀이

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        
        int[][] numArr = new int[n][m];
        
        for(int i=0;i<n;i++){
            st = new StringTokenizer(br.readLine());
            for(int j=0;j<m;j++){
                numArr[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        // 1 1 1
        // 2 2 2
        // 0 1 0
        
        
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<n;i++){
            st = new StringTokenizer(br.readLine());
            for(int j=0;j<m;j++){
                numArr[i][j] += Integer.parseInt(st.nextToken());
                sb.append(numArr[i][j]).append(" ");
            }
            sb.append("\n");
        }
        System.out.print(sb.toString());
        
    }
}

 

✅ 생각의흐름

 

1. 입력되는 원소들을 행렬의 크기만큼 나누어 사용하기위해 N과 M을 받고 그 크기만큼의 2차원 배열을 생성한다

 

2. 2중반복문을 사용해 입력되는 원소들을 만들어둔 2차원배열에 담는다

첫2중반복문이 끝나면

1 1 1

2 2 2

0 1 0  형태가 만들어져있을것이다

 

3. 이후 다시 3*3크기의 아래쪽 행렬B의 원소들을 더하기위해 다시한번 2중반복문을 만들고

     기존에 담겨져있던 3*3크기의 2차원배열 각 원소의 값에 새로들어오는 B행렬의 원소값을 더한다.

 

4. 더하며 StringBuilder에 담아두었다가 출력한다.

 

 

 

 

-출처

https://www.acmicpc.net/problem/2738