두 개의 2차원 배열을 입력받은 값으로 저장하고 행렬 덧셈을 하는 문제다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(input.readLine(), " ");
// 행렬 크기 입력받아 저장
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
// 두개의 행렬 생성
int[][] firstArr = new int[a][b];
int[][] secondArr = new int[a][b];
// 첫번째 배열 저장
for (int i = 0; i < a; i++) {
String valueInput = input.readLine();
StringTokenizer valueSt = new StringTokenizer(valueInput, " ");
int tokenCount = valueSt.countTokens();
for (int j = 0; j < tokenCount; j++) {
int temp = Integer.parseInt(valueSt.nextToken());
firstArr[i][j] = temp;
}
}
// 두번째 배열 저장
for (int i = 0; i < a; i++) {
String valueInput2 = input.readLine();
StringTokenizer valueSt2 = new StringTokenizer(valueInput2, " ");
int tokenCount = valueSt2.countTokens();
for (int j = 0; j < tokenCount; j++) {
int temp = Integer.parseInt(valueSt2.nextToken());
secondArr[i][j] = temp;
}
}
int[][] resultArr = new int[a][b];
// 행렬 덧셈
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
int x = firstArr[i][j];
int y = secondArr[i][j];
System.out.print(x+y + " ");
}
System.out.println();
}
}
}
문제를 접근할 때 설명대로 배열 두개를 초기화하여 입력받은 값을 저장하는 방식으로 하였다. 물론 이렇게 풀어도 정답은 나오지만 굳이 배열을 두개 생성하지 않고 두번째 배열 값을 받을 때 첫번째 배열의 인덱스에 접근해 바로 덧셈을 진행하는 방식이 훨씬 빠르고 메모리에도 유리할 것 같다.