본문으로 바로가기

행렬의 곱셈 ] : < LV2 >

더보기
#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
    vector<vector<int>> answer;
    //
    int a_row = arr1.size();
    int a_col = arr1[0].size();
    int b_col = arr2[0].size();
    // 연산
    for(int r = 0; r < a_row; ++r)
    {
        vector<int> tmp;
        for(int c = 0; c < b_col; ++c)
        {
            int val = 0;
            for(int k = 0; k < a_col; ++k)
                val += arr1[r][k] * arr2[k][c];
            //
            tmp.push_back(val);
        }
        answer.push_back(tmp);
    }
    //
    return answer;
}

# 행렬? -> 3중 for문


피보나치 수 ] : < LV2 >

더보기
#include <string>
#include <vector>

using namespace std;

int solution(int n)
{
    int answer = 0;
    // 피보나치 상수 정의 : f(0) = 0, f(1) = 1
    int fibo = 1, prev = 1, pprev = 0;
    for(int i = 2; i < n; ++i)
    {
        pprev = prev;
        prev = fibo;
        // mod 연산의 성질
        fibo = (prev + pprev) % 1234567;
    }
    //
    answer = fibo;
    //
    return answer;
}

# 최종값에 mod연산시 overflow 발생
  -> mod 연산의 성질에 따라 연산 중간결과에 mod 적용
    ※ (a+b)%c = ((a%c)+(b%c))%c


최솟값 만들기 ] : < LV2 >

더보기
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> A, vector<int> B)
{
    int answer = 0;
    //
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
    //
    int sum = 0;
    int cnt = A.size();
    for(int i = 0; i < cnt; ++i)
    {
        int max, min;
        if(A.back() > B.back())
        {
            max = A.back();
            min = B.front();
            //
            sum += (max) * (min);
            //
            A.pop_back();
            B.erase(B.begin());
        }
        else
        {
            max = B.back();
            min = A.front();
            //
            sum += (max) * (min);
            //
            A.erase(A.begin());
            B.pop_back();
        }
    }
    //
    answer = sum;
    //
    return answer;
}

# STL vector
  - 처음/끝 iterator : v. begin() / v.end()
  - 처음/끝 data : v.front() / v.back()
  - v.end()는 마지막 데이터 [바로 다음]의 iterator(종료)
    -> 마지막 원소 제거 : v.erase(v.end() -1) //or// v.pop_pack()