2 minute read




문제 풀이


2차원 배열 분야가 부족한 것 같아 2차원 배열 카테고리의 문제를 풀어보기로 하였다.
이번 문제는 2차원 배열을 활용해 A 행렬과 B 행렬의 덧셈 연산을 하면 된다.


아이디어 도출

  • 공백 기준으로 입력받은 A 행렬과 B 행렬의 값을 각각 2차원 배열로 만들어 저장한다.
  • 이중 for문을 통해 A, B 행렬을 순회하며 각 자리의 원소값을 더한다.


간단한 방법으로 2차원 배열에서의 덧셈을 할 수 있다.
바로 코드로 작성해보자.

1
2
3
4
5
6
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());

int[][] A = new int[N][M];
int[][] B = new int[N][M];

N*M 크기의 A와 B행렬을 만들어야 하기에 N과 M을 입력받아 NXM 크기를 가진 2차원 배열 A, B을 초기화하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// A 행렬의 값을 2차원 배열에 저장
for(int i=0; i<N; i++) {
    st = new StringTokenizer(br.readLine());
    for(int j=0; j<M; j++) {
        A[i][j] = Integer.parseInt(st.nextToken());
    }
}
// B 행렬의 값을 2차원 배열에 저장
for(int i=0; i<N; i++) {
    st = new StringTokenizer(br.readLine());
    for(int j=0; j<M; j++) {
        B[i][j] = Integer.parseInt(st.nextToken());
    }
}

문제 입력 테스트케이스를 보면 A 행렬의 값을 먼저 입력받고 B 행렬의 값을 입력받기 때문에
A 행렬을 먼저 2차원배열에 저장해주고, 다음에 B 행렬을 2차원배열로 저장해준다.

1
2
3
4
5
for(int i=0; i<N; i++) {
    for(int j=0; j<M; j++) {
        A[i][j] += B[i][j]; // A 행렬에 B 행렬의 값을 덧셈
    }
}

A와 B 행렬 모두 NXM 크기이기 때문에 이중 for문으로 NXM 만큼 순회하면서 A 행렬의 각 원소값에 B 행렬의 각 원소의 값을 덧셈해주면 된다.

1
2
3
4
5
6
for(int[] arr : A) {
    for(int num : arr) {
        bw.write(num + " ");
    }
    bw.write("\n");
}

마지막으로 A에 B 값을 더했으니 A 행렬의 값을 공백을 추가하여 출력해주면 된다.



작성코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[][] A = new int[N][M];
        int[][] B = new int[N][M];

        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j=0; j<M; j++) {
                A[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        
        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j=0; j<M; j++) {
                B[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        for(int i=0; i<N; i++) {
            for(int j=0; j<M; j++) {
                A[i][j] += B[i][j];
            }
        }

        for(int[] arr : A) {
            for(int num : arr) {
                bw.write(num + " ");
            }
            bw.write("\n");
        }

        bw.flush();
        bw.close();
        br.close();
    }   
}

회고

  • 2차원 배열 문제들을 풀어보며, 2차원 배열의 인덱스 값 접근, 값 활용 등 2차원 배열을 활용하는 문제를 많이 풀어야겠다.