<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[Level 1] 행렬의 덧셈

BlockDMask 2017. 12. 13. 15:00
반응형
  • 안녕하세요 BlockDMask 입니다.

  • 프로그래머스 알고리즘 문제 풀어보겠습니다.
    171107 문제 빼먹음 -> 171213 완료

0. 제목

  • 프로그래머스 Level 1 행렬의 덧셈

  • Programmers Level 1 Sum of matrix

  • C++ vector container

1. 문제 설명

  • 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다.

  • 2개의 행렬을 입력받는 sumMatrix 함수를 완성하여 행렬 덧셈의 결과를 반환하면 됩니다. 

  • 예를 들어 2x2 행렬인 
    A = ((1, 2), (2, 3)),
    B = ((3, 4), (5, 6))
    이 주어지면

  • 같은 2x2 행렬인 ((4, 6), (7, 9))를 반환하면 됩니다.

  • (어떠한 행렬에도 대응하는 함수를 완성해 주세요.)

2. 풀이 과정

  • 2차원 배열을 만들어 각각의 행렬에 대응하는 값을 더해서 넣어주면 되는 문제 입니다.
    하지만, vector 컨테이너의 데이타 타입으로 또 vector 컨테이너를 넣어서, 
    vector를 이용하여 사이즈가 가변적인 2차원 배열을 표현하는 방법을 처음 봤습니다.

  • 조금 생각을 해보니, vector<vector<int> > 는

  • 이런식으로 
    사이즈가 같은 vector<int> 들을 한번더 묶은 vector container 라는 생각이 들었습니다.
    그림의 맨 아래 처럼 보면 2차원 배열처럼 표현이 가능하다고 생각이 들었습니다.
    코드를 통해 실습을 해보았는데, 제 생각이 맞았습니다.

  • 또한, answer[0][0] 이런식으로 2차원 배열처럼 접근이 가능합니다.
    vector 자체가 가변적인 1차원 배열이기 때문입니다.

  • vector container 에 대한 자세한 설명은 [여기] 에 있습니다.

  • 문제가 쉽다고 해서 배울게 없는게 아니라는 것을 느꼈습니다.
    아직도 갈길이 멀기만 합니다.
    하나하나 꾸준히..


3. 소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<vector>
using namespace std;
 
vector<vector<int> > sumMatrix(vector<vector<int> >A, vector<vector<int> >B)
{
    vector<vector<int> > answer;
 
    for(int i=0; i<A.size(); i++){  //2차원 배열의 y
 
        vector<int> v;              //하나의 y에 대한 x의 값들 (1차원 배열이라고 생각)
 
        for(int j=0; j<A[0].size(); j++){   //2차원 배열의 x
            v.push_back(A[i][j] + B[i][j]);
        }
 
        answer.push_back(v);
    }
    return answer;
}
cs


4. 인증



문제 출처 : https://programmers.co.kr/learn/challenge_codes/148

감사합니다.

반응형