[문제]
N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.
* 입력 : 첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.
* 출력 : 첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.
[풀이]
1. 입력받을 행렬의 크기를 지정하기 위해 변수 선언 및 입력을 받음
int n = sc.nextInt();
int m = sc.nextInt();
2. 2개의 행렬을 더하는 것이기 때문에 2개의 행렬을 선언 및 입력받음
int[][] a = new int[n][m];
int[][] b = new int[n][m];
for(int i = 0; i<n; i++){ //첫번째 행렬 입력받기
for(int j = 0; j<m; j++){
a[i][j] = sc.nextInt();
}
}
for(int i = 0; i<n; i++){ //두번째 행렬 입력받기
for(int j = 0; j<m; j++){
b[i][j] = sc.nextInt();
}
}
3. 입력받은 후 결과값을 저장할 배열을 선언 및 값을 저장함 (배열을 저장하지 않고 값을 바로바로 출력해도 문제 없음; 필자는 전자와 같이 코드를 짬)
추가적으로 각 값 사이에 공백이 필요하기 때문에 공백 주의하여 출력 필요함
int[][] result = new int[n][m];
for(int i = 0; i<n; i++){
for(int j = 0; j<m; j++){
result[i][j] = a[i][j]+b[i][j];
System.out.print(result[i][j]+" ");
}
System.out.println("");
}
[최종코드]
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
//a, b 행렬 입력 받기
int[][] a = new int[n][m];
int[][] b = new int[n][m];
for(int i = 0; i<n; i++){
for(int j = 0; j<m; j++){
a[i][j] = sc.nextInt();
}
}
for(int i = 0; i<n; i++){
for(int j = 0; j<m; j++){
b[i][j] = sc.nextInt();
}
}
int[][] result = new int[n][m];
for(int i = 0; i<n; i++){
for(int j = 0; j<m; j++){
result[i][j] = a[i][j]+b[i][j];
System.out.print(result[i][j]+" ");
}
System.out.println("");
}
}
}
'알고리즘 연습 > 2차원 배열' 카테고리의 다른 글
[백준 JAVA] 2563번 - 색종이 (0) | 2022.11.27 |
---|---|
[백준 JAVA] 2566번- 최댓값 (0) | 2022.10.27 |