안녕하세요 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
감사합니다.
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[Level 2] 콜라즈 추측 (0) | 2017.12.26 |
---|---|
[Level 1] 피보나치 수 (반복문) (3) | 2017.12.15 |
[Level 1] 최대공약수와 최소공배수 (0) | 2017.12.14 |
[백준 1463] 1로 만들기 (BFS) (0) | 2017.12.13 |
[백준 1463] 1로 만들기 (DP) (2) | 2017.12.12 |
[Level 1] 약수의 합 (C언어 약수구하기) (0) | 2017.12.12 |
[백준 2748] 피보나치 수2 (0) | 2017.12.05 |
[백준 1924] 2007년 (0) | 2017.12.04 |