Code KATA/알고리즘 코드카타

[2025.01.07] 행렬의 덧셈

iiblueblue 2025. 1. 7. 09:50

문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

 

 

제한사항

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

 

 

입출력 예

arr1 arr2 return
[[1, 2], [2, 3]] [[3, 4], [5, 6]] [[4, 6], [7, 9]]
[[1],[2]] [[3],[4]] [[4],[6]]

 

 

문제 풀이

풀이 언어 : C++

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    vector<vector<int>> answer;
    vector<int> row_answer; // 행
    
    for(int row=0; row<arr1.size(); row++)
    {
        row_answer.clear(); // 초기화
        
        for(int col=0; col<arr1[0].size(); col++)
        {
            row_answer.push_back(arr1[row][col]+arr2[row][col]); // row 번째 행 만들기
        }
        answer.push_back(row_answer); // 행 추가
    }
    return answer;
}

드디어 2차원 벡터가 등장했다. 2차원 벡터를 훝어볼 수도 있고 2차원 벡터에 값도 추가할 수 있는지 확인하는 문제 같았다. 2차원 벡터가 가지고 있는 값을 훑어 보는 방법은 간단하다. for문 2개를 사용해서 각각 행과 열을 맡아 인덱스를 돌리며 arr1과 arr2의 값을 가져올 수 있을 것이다.

 

다음은 answer 행렬에 값을 추가하는 방법이다. 나는 행을 한줄씩 만들어서 answer에 붙여주기로 하였다. 일단 행 한줄을 만들어 담을 row_answer을 반복문 밖에 선언하고 큰 반복문이 시작될 때마다 초기화 한다. 그리고 작은 반복문 안에서 arr1[row][col]+arr2[row][col]의 값을 push_back을 이용해 만들어간다. 작은 반복문을 나와서 마지막에 answer에 행 한줄을 추가해주면 된다. 이렇게 한줄씩 넣어가면 answer에는 행렬의 합이 저장되게 된다.

 

참고 사항

arr1.size()는 행의 갯수가 된다. 그리고 arr[0].size()는 열의 갯수가 된다.

 

 

오답 노트

크기가 정해져있는 배열에 값을 추가하듯이 인덱스를 넣어서 값을 추가하려고 했는데 아직 정의되지도 않은 공간에 값을 저장하는 꼴이 되어 오류가 발생하였다.

answer[row][col]=arr1[row][col]+arr2[row][col]; // 오류 발생

 

2차원 벡터를 이용할 때는 천천히 행 한줄을 push_back으로 완성해주고 행 통째로 추가해주어야 했다.

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12950

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr