[C++] : 행렬의 덧셈 - 2차원 벡터

wansuper·2023년 12월 27일
0

CodingTest

목록 보기
16/34

정답 확인

#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> Q;
    for (int i = 0; i < arr1.size(); i++) {
        
        // 한 행 단위로 j는 한 열씩 이동하며 반복 계산 -> 계산된 한 행이 Q에 추가
        for (int j = 0; j < arr1[i].size(); j++) {
            
            Q.push_back(arr1[i][j] + arr2[i][j]);
        }
        // Q에 들어간 계산된 한 행이 answer에 원소로 채워짐
        answer.push_back(Q);
        
        // 위에서 이미 계산한 행을 지우고 다음 행에 대한 계산을 하기 위해 계산된 Q 벡터를 비움
        Q.clear();
    }
    return answer;
}

패착 요인:

  • 2차원 벡터를 어떻게 다루는지 몰랐다.
  • 그래도 for문을 이중으로 반복 시 arr1으로 한번 돌리고, arr1[i]로 한번 돌리는 방식은 알고 있었다. (Thx for ASP 수업)
  • TODO: 2차원 벡터 정리하기
  • 만약 테스트 케이스를 추가한다면 다음과 같이 내가 기입할 수 있다.
int main()
{
	// 중괄호 내의 중괄호로 넣기
    vector<vector<int>> a{{1,2},{2,3}}, b{{3,4},{5,6}};
    vector<vector<int>> answer = solution(a, b);

    for (int i = 0; i < answer.size(); i++)
    {
        for (int j = 0; j < answer[0].size(); j++)
        {
            cout << answer[i][j] << " ";
        }
        cout << "\n";
    }
}

2차원 벡터

2차원 벡터의 선언 : vector<vector<자료형>> 변수명;

vector<vector<int>> answer; // 작은 벡터 Q들을 품고 있는 큰 벡터 answer
vector<int> Q; 				// 작은 벡터 Q
Q.push_back(1);
Q.push_back(2);
answer.push_back(Q);
cout << answer.at(0).at(0); // 1 출력
cout << answer[0][1]; // 2 출력

vector<vector> answer; : 벡터를 선언할 때 자료형을 벡터로 선언하면 벡터 자료형을 담을 수 있는 벡터 자료형으로 사용할 수 있음

vector Q; answer.push_back(Q); : 벡터에 자료를 넣을 때는 1차원 벡터를 선언해서 값을 저장한 뒤 2차원 벡터에 삽입할 수 있다.

cout << answer.at(0).at(0); : 2차원 배열의 첫번째 원소에 접근한다. 값을 push_back한 이후에 접근할 수 있다.

cout << answer[0][0]; : 배열과 같이 인덱스로 접근할 수 있다.

2차원 벡터의 초기화

벡터의 행과 열의 크기를 아는 경우 다음과 같이 벡터의 크기를 초기화 할 수 있다.
vector<vector> v(n,vector(m)); : NM만큼 2차원 벡터 공간만 확보
vector<vector> v(n,vector(m,0)); : N
M만큼 2차원 벡터 0으로 값 초기화

예시 코드

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n, m, cnt = 1;
    cin >> n >> m; // 사용자 입력
	
    // n x m 의 2차원 벡터 행렬 생성
    vector<vector<int>> v(n, vector<int>(m));
  
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            v[i][j] = cnt++;
        }
    }
  
    // 출력
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << v[i][j] << " ";
        }
        cout << '\n';
    }
}
사용자 입력:   2 3			1 4
출력:
			 1 2 3	      1 2 3 4
			 4 5 6
profile
🚗 Autonomous Vehicle 🖥️ Study Alone

0개의 댓글