2차원 배열을 2개 생성해서 더하는 것보다 1개의 2차원 배열에서 바로 값을 더하는 게 효율적이라고 생각해서 그렇게 풀어보았다.
2차원 배열의 값을 2번 받기 때문에, 반복분에서의 코드를 조금 다른 방식들로 해보았다.(거기서 거기지만ㅎ)
2차원 배열에 값을 넣는 반복문과 2차원 배열을 출력하는 반복문으로 구성했다.
배열의 값을 받는 반복문을 N*2번 반복했다. 하지만 인덱스 범위는 N-1까지이므로 i가 N이 넘어가면 N만큼 빼야 해서 tmp 값을 새로 만들어 주었다.
import java.io.*;
import java.util.StringTokenizer;
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[][] arr = new int[N][M];
for(int i=0; i<N*2; i++){
st = new StringTokenizer(br.readLine(), " ");
int tmp = i;
if(i>=N)
tmp -= N;
for(int j=0; j<M; j++){
arr[tmp][j] += Integer.parseInt(st.nextToken());
}
}
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
System.out.print(arr[i][j]+ " ");
}
System.out.println();
}
}
}
이번에도 값을 넣는 반복문, 출력하는 반복문으로 총 2개의 반복문으로 구성했다.
tmp를 생성하는 방법말곤 없을까 하다가 어차피 똑같은 코드니까 반복하지 말고 함수로 따로 뺄까? 생각했던 게 떠올랐다. 또 다른 반복문에 해당 코드를 집어넣으면 두 번 반복되자나! 그래서 삼중 반복문이 되었다.
import java.io.*;
import java.util.StringTokenizer;
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[][] arr = new int[N][M];
for(int k=0; k<2; k++){
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine(), " ");
for(int j=0; j<M; j++){
arr[i][j] += Integer.parseInt(st.nextToken());
}
}
}
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
System.out.print(arr[i][j]+ " ");
}
System.out.println();
}
}
}
이번에는 방법2를 아주 조금만 변형해 보았다.
첫 이중 반복문에서는 배열에 값을 저장하고, 두 번째 이중 반복문에서 배열에 값을 더한 후 바로 출력하는 방식이다.
import java.io.*;
import java.util.StringTokenizer;
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[][] arr = new int[N][M];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine(), " ");
for(int j=0; j<M; j++){
arr[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++){
arr[i][j] += Integer.parseInt(st.nextToken());
System.out.print(arr[i][j]+ " ");
}
System.out.println();
}
}
}

아래서부터 방법1, 2, 3이다.
역시 첫 번째 방법이 젤 안 좋구만