[프로그래머스] Vector와 2차원 행렬의 곱
문제를 풀기에 앞서 우리는 Vector라는 프로그래밍에서 중요한 개념을 알고 넘어가야 한다.
Vector는 많은 양의 데이터를 다룰 때 효과적으로 메모리를 관리할 수 있게 해준다.
📒Vector
✍ 1차원 Vector
📌Vector Container 란?
자동으로 메모리가 할당되는 배열
Template를 사용하기 때문에 데이터 타입이 자유롭다.
📌Vector의 사용법
-
Vector의 생성자와 연산자
- vector V
: 비어있는 vector v를 생성
- vector v(5)
: 기본값인 0으로 초기화된 5개의 원소를 가지는 vector v 생성
- vector v(5,2)
: 2로 초기화된 5개의 원소를 가지는 vector v 생성
- vector v1(v2)
: v2를 복사한 v1생성
-
Vector의 멤버 함수
- v.assign(a, b)
: b의 값으로 a개의 원소 할당
- v.at(idx), v[idx]
: idx번째 원소를 참조
- v.front(), v.back()
: 첫 번째 원소를 참조/ 마지막 원소를 참조
- v.clear()
: 모든 원소를 제거, 원소만 제거하고 메모리는 남는다.
- v.push_back(7)
: 마지막 원소 뒤에 원소 7을 삽입한다. 자주 사용되는 함수.
- v.pop_back()
: 마지막 원소를 제거한다. 자주 사용되는 함수
위와 같은 멤버함수를 사용함으로써 Vector를 통해 효율적인 메모리 관리를 할 수 있다.
이번 문제의 핵심은 1차원 Vector가 아닌, 2차원 Vector를 다루는 것이다.
✍ 다차원 Vector
📌다차원 Vector Container 란?
Vector Container를 원소로 가지고 있는 Vector Container
📌다차원 Vector의 사용법
기존 1차원 vector를 사용하는 것과 비슷하다 단, 기존 1차원 vector는 원소가 단순 변수이지만, 다차원 Vector는 Vector를 원소로 사요한다는 점을 주의해야 한다.
📒2차원 행렬의 곱
자동으로 메모리가 할당되는 배열
Template를 사용하기 때문에 데이터 타입이 자유롭다.
Vector의 생성자와 연산자
- vector V
: 비어있는 vector v를 생성
- vector v(5)
: 기본값인 0으로 초기화된 5개의 원소를 가지는 vector v 생성
- vector v(5,2)
: 2로 초기화된 5개의 원소를 가지는 vector v 생성
- vector v1(v2)
: v2를 복사한 v1생성
Vector의 멤버 함수
- v.assign(a, b)
: b의 값으로 a개의 원소 할당
- v.at(idx), v[idx]
: idx번째 원소를 참조
- v.front(), v.back()
: 첫 번째 원소를 참조/ 마지막 원소를 참조
- v.clear()
: 모든 원소를 제거, 원소만 제거하고 메모리는 남는다.
- v.push_back(7)
: 마지막 원소 뒤에 원소 7을 삽입한다. 자주 사용되는 함수.
- v.pop_back()
: 마지막 원소를 제거한다. 자주 사용되는 함수
위와 같은 멤버함수를 사용함으로써 Vector를 통해 효율적인 메모리 관리를 할 수 있다.
이번 문제의 핵심은 1차원 Vector가 아닌, 2차원 Vector를 다루는 것이다.
Vector Container를 원소로 가지고 있는 Vector Container
기존 1차원 vector를 사용하는 것과 비슷하다 단, 기존 1차원 vector는 원소가 단순 변수이지만, 다차원 Vector는 Vector를 원소로 사요한다는 점을 주의해야 한다.
다차원 Vector를 이용한 문제다. 기본적인 행렬의 곱을 할 줄 알아야 풀 수 있는 문제다.
📌문제 해석
arr1에서는 행을 뽑고, arr2에서는 열을 뽑아 각각의 원소를 곱하고 더하여 answer의 각각의 원소의 값을 찾는다.
📌구현
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
vector<vector<int>> answer;
for(int i=0; i<arr1.size(); i++){ // arr1에서의 행 단위 추출
vector<int> v1; //다차원 Vector 삽입을 위한 1차원 Vector(answer의 각 행)
for(int j=0; j<arr2[0].size(); j++){ // arr2에서의 열 단위 추출(열의 개수를 위한 arr2[0]사용)
int val=0;
for(int k=0; k<arr2.size(); k++){ //arr1과 arr2의 각 행과 열의 곱과 합
val+=(arr1[i][k]*arr2[k][j]);
}
v1.push_back(val);
}
answer.push_back(v1); //answer의 각 행 삽입
}
return answer;
}
📌주의점
- 다차원 Vector의 사용법 숙지가 필요하다
- 기본적인 행렬의 곱을 숙지해야 한다.
- 3중 for문의 사용.
Author And Source
이 문제에 관하여([프로그래머스] Vector와 2차원 행렬의 곱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gomhyeok/Vector와-2차원-행렬의-곱저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)