[Java] 행렬 덧셈

정석·2024년 2월 13일

알고리즘 학습

목록 보기
12/67
post-thumbnail

문제

두 개의 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();
        }
    }
}

문제를 접근할 때 설명대로 배열 두개를 초기화하여 입력받은 값을 저장하는 방식으로 하였다. 물론 이렇게 풀어도 정답은 나오지만 굳이 배열을 두개 생성하지 않고 두번째 배열 값을 받을 때 첫번째 배열의 인덱스에 접근해 바로 덧셈을 진행하는 방식이 훨씬 빠르고 메모리에도 유리할 것 같다.

0개의 댓글