문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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
'Code KATA > 알고리즘 코드카타' 카테고리의 다른 글
[2025.01.08] 추억 점수 (0) | 2025.01.08 |
---|---|
[2025.01.08] 직사각형 별찍기 (0) | 2025.01.07 |
[2025.01.06] 문자열 다루기 기본 (0) | 2025.01.06 |
[2025.01.05] 부족한 금액 계산하기 (0) | 2025.01.06 |
[2025.01.04] 문자열 내림차순으로 배치하기 (1) | 2025.01.03 |