[백준 문제 풀이] 2738번 행렬 덧셈

Junu Kim·2025년 7월 4일
0
post-thumbnail

[2738] 행렬 덧셈

난이도: ★☆☆☆☆ • solved on: 2025-07-04


문제 요약

  • 문제 유형: 구현, 2차원 배열
  • 요구사항: 두 개의 N×M 행렬을 입력받아, 같은 위치의 원소끼리 더한 결과 행렬을 출력해야 한다.

사용 개념

  1. 자료구조
    • 2차원 배열 (int[][])
  2. 알고리즘/기법
    • 반복문을 통한 누적 덧셈, BufferedReader를 활용한 빠른 입력
  3. 핵심 키워드
    • 행렬 덧셈, 누적 연산

풀이 아이디어 및 코드

  1. 문제 분해
    • N, M을 입력받아 N×M 크기의 2차원 배열 선언
    • 2N줄을 반복 입력받으며, 같은 위치의 값을 누적 덧셈 (첫 번째 행렬, 두 번째 행렬 순서로 입력)
  2. 핵심 로직 흐름
    for i = 0 to 2n-1:
        입력 행(row) → 정수로 변환
        for j = 0 to m-1:
            arr[i%n][j] += row[j]
    ``
  3. 예외 처리
    • 입력 조건상 예외 상황 없음

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader  br = new BufferedReader(new InputStreamReader(System.in));
        String[] sizes = br.readLine().split(" ");
        int n = Integer.parseInt(sizes[0]);
        int m = Integer.parseInt(sizes[1]);
        int[][] arr = new int[n][m];
        for(int i=0;i<2*n;i++){
            String[] row = br.readLine().split(" ");
            for(int j=0;j<m;j++){
                arr[i%n][j] += Integer.parseInt(row[j]);
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
    }
}

시간·공간 복잡도

  • 시간 복잡도: O(N × M)
  • 공간 복잡도: O(N × M)

어려웠던 점

  • 입력을 2N번 반복하면서 i % n을 이용해 첫 번째, 두 번째 행렬의 데이터를 하나의 배열에 누적시키는 방식이 직관적으로 보이지 않을 수 있다.
  • 이번 문제 풀이에서는 직관보다는 어떻게 하면 효율적으로 짤 수 있을까에 초점을 맞춰서 실제 작동에 대해 꿰고 있다라는 생각이 안 들었다.

배운 점 및 팁

  • 입력 데이터를 한 번에 처리하며 공간을 아낄 수 있지만, 코드의 직관성은 떨어질 수 있다는 한계점이 있었다.
  • 입력이 많은 문제에서는 BufferedReader와 split 사용이 효과적이었기에 습관화 해두는게 좋을 듯 하다.

참고 및 링크


추가 연습 문제

  • 비슷한 유형 (GPT 추천): 백준 2566번: 최댓값
  • 확장 문제 (GPT 추천): 행렬 곱셈 구현, 희소 행렬 연산
profile
생각이 현실이 될 수 있도록 노력하는 중입니다.

0개의 댓글