[Java] 백준(브론즈-5) 2738번 - 행렬 덧셈

문제 풀이
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차원 배열을 활용하는 문제를 많이 풀어야겠다.