🟤 백준 2738번: 행렬 덧셈 (브론즈3)
문제 풀이
1차 풀이
import java.io.*;
import java.lang.*;
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());
// 2개의 행렬 저장할 2개의 2차원 배열
int[][] arr1 = new int[n][m];
int[][] arr2 = new int[n][m];
// 마지막 행렬 출력을 위한 StringBuilder
StringBuilder sb = new StringBuilder();
// 1번 행렬 저장
for (int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
for (int j=0; j<m; j++) {
arr1[i][j] = Integer.parseInt(st.nextToken());
}
}
// 2번 행렬 저장
for (int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
for (int j=0; j<m; j++) {
arr2[i][j] = Integer.parseInt(st.nextToken());
}
}
// 행렬 덧셈 결과를 StringBuilder에 저장
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
arr1[i][j] += arr2[i][j];
sb.append(arr1[i][j]).append(" ");
}
sb.append("\n"); // 줄바꿈
}
System.out.println(sb);
}
}
입력 받는 2개의 행렬을 저장하고, 행렬 덧셈 결과를 출력하는 코드를 구현하면 됨
행렬은 무조건 2차원 배열을 떠올리기!
출력할 때도 2차원 배열에 저장해서 출력할 수 있을까 생각했는데,
뭔가 더 헷갈려서 `StringBuilder`를 사용해서 공백으로 숫자를 이어 붙이고, `"\n"`으로 줄바꿈을 줬음
2차 풀이
import java.io.*;
import java.lang.*;
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());
// 2개의 행렬 저장할 2개의 2차원 배열
int[][] arr1 = new int[n][m];
int[][] arr2 = new int[n][m];
// 마지막 행렬 출력을 위한 StringBuilder
StringBuilder sb = new StringBuilder();
// 1번 행렬 저장
for (int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
for (int j=0; j<m; j++) {
arr1[i][j] = Integer.parseInt(st.nextToken());
}
}
// 2번 행렬 저장
for (int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
for (int j=0; j<m; j++) {
arr2[i][j] = Integer.parseInt(st.nextToken());
}
}
// 행렬 덧셈 결과를 StringBuilder에 저장
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
sb.append(arr1[i][j] + arr2[i][j]).append(" ");
}
sb.append("\n"); // 줄바꿈
}
System.out.println(sb);
}
}
1차 풀이에선 복합 대입 연산자 `+=`를 사용해서 arr1[i][j]에 arr2[i][j] 값을 더한 값을 저장하고 출력했음
이 문제에선 ` arr1[i][j]`을 갱신해서 다른 곳에 활용하지 않고, 행렬 덧셈 값을 바로 출력하면 되기 때문에
`arr1[i][j] + arr2[i][j]` 결과를 `StringBuilder`에 저장해서 출력하면 됨
1차 풀이는 `arr1[i][j]`를 갱신하는 메모리 쓰기가 추가로 있기 때문인지 제거하니까 2차 풀이 실행 시간이 더 빨라짐
'Coding Test > PS' 카테고리의 다른 글
[백준/Java] 2562번: 최댓값 (브론즈3) (0) | 2025.04.08 |
---|---|
[백준/Java] 10817번: 세 수 (브론즈3) (0) | 2025.04.07 |
[백준/Java] 11718번: 그대로 출력하기 (브론즈3) (0) | 2025.04.04 |
[백준/Java] 2525번: 오븐 시계 (브론즈3) (0) | 2025.04.02 |
[백준/Java] 2566번: 최댓값 (브론즈3) (0) | 2025.04.02 |