[프로그래머스] 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차원 행렬의 곱

다차원 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문의 사용.

좋은 웹페이지 즐겨찾기