[ 행렬의 곱셈 ] : < 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()
'Algorithm' 카테고리의 다른 글
Programmers - JadenCase 문자열 만들기, N개의 최소공배수 (0) | 2021.09.04 |
---|---|
Programmers - 숫자 문자열과 영단어, 위클리 챌린지 1주차, 2주차, 4주차, 5주차 (0) | 2021.09.01 |
Programmers - 게임 맵 최단거리, 괄호 변환, 메뉴 리뉴얼 (0) | 2021.06.24 |
Programmers - 전화번호 목록, 소수 찾기, 예상 대진표 (0) | 2021.06.19 |
Programmers - 카카오프렌즈 컬러링북, 수식 최대화, 튜플 (0) | 2021.06.16 |