<문제 제시>
<문제설명>
N*M크기의 두 행렬 A와 B가 주어졌을 때,
두 행렬을 더하는 프로그램을 작성하시오.
<예시 입출력>
<문제 해결 과정>
N * M 크기의 행렬 두개가 주어지고 행렬의 덧셈을 수행해야한다.
각 인덱스에 맞게 더한 후 반환해야했다.
Answer 1)
for(int i = 0; i < N*2; i++) {
// INPUT : N행의 원소 값들
st = new StringTokenizer(br.readLine());
// 2차원배열 B에 입력받기
if(i >= N) {
for(int j = 0; j < M; j++) {
B[k][j] = Integer.parseInt(st.nextToken());
}
k++;
}
// 2차원배열 A에 입력받기
else {
for(int j = 0; j < M; j++) {
A[i][j] = Integer.parseInt(st.nextToken());
}
}
}
배열을 입력받는 부분이다. 2개의 행렬을 중간에 구분없이 입력받아야하기때문에 N * 2 만큼 반복해준다.
// 2. A와 B행렬의 인덱스가 같을때 더함
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
sum[i][j] = A[i][j] + B[i][j];
}
}
더하는 부분의 로직은 쉽게 구현할 수 있었다.
<전체코드>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
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;
// INPUT : N x M
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
// 2차원 배열 선언 (N x M)
int[][] A = new int[N][M];
int[][] B = new int[N][M];
int[][] sum = new int[N][M];
int k = 0;
for(int i = 0; i < N*2; i++) {
// INPUT : N행의 원소 값들
st = new StringTokenizer(br.readLine());
// 2차원배열 B에 입력받기
if(i >= N) {
for(int j = 0; j < M; j++) {
B[k][j] = Integer.parseInt(st.nextToken());
}
k++;
}
// 2차원배열 A에 입력받기
else {
for(int j = 0; j < M; j++) {
A[i][j] = Integer.parseInt(st.nextToken());
}
}
}
// 1차 테스트 출력
System.out.println("A = " + Arrays.deepToString(A));
System.out.println("B = " + Arrays.deepToString(B));
// 2. A와 B행렬의 인덱스가 같을때 더함
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
sum[i][j] = A[i][j] + B[i][j];
}
}
// 3. 양식에 맞게 출력
int[] print = new int[M];
int print2 = 0;
for(int i = 0; i < N; i++) {
print = sum[i];
// 출력 (공백처리) - 마지막 인덱스는 " "를 붙여주지 않음
for(int j = 0; j < M; j++) {
if(j == (M - 1)) {
print2 = print[j];
System.out.print(print2);
}
else {
print2 = print[j];
System.out.print(print2 + " ");
}
}
// 행 바뀔때마다 줄바꿈
System.out.println();
}
}
}
3에서 출력을 3x3처럼 보기 쉽게 출력할 수 있었다.
문제링크)
https://www.acmicpc.net/problem/2738
'Algorithms > 백준' 카테고리의 다른 글
[백준] '색종이' - Java (0) | 2023.07.17 |
---|---|
[백준] '최댓값' - Java (0) | 2023.07.16 |
[백준] '나이순 정렬' - Java (0) | 2023.07.15 |
[백준] '단어 정렬' - Java (0) | 2023.07.15 |
[백준] '소트인사이드' - Java (0) | 2023.07.14 |