rotate() 함수를 이용해서 손쉽게 구현할 수 있다.
rotate( 시작 위치, 시작위치로 만들고 싶은 위치, 회전 시킬 위치의 마지막)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector<int> v = {1,2,3,4,5};
rotate(v.begin(),v.begin()+ 1, v.end()); // 첫번째 인자는 그냥 시작점. 두번째 인자는 처음으로 만들고 싶은 원소!
for(int i : v) cout << i;
cout << endl;
v = {1,2,3,4,5};
rotate(v.begin(), v.begin() + 2, v.begin()+ 4); // 5는 계속 맨뒤에 존재
for(int i : v) cout << i;
cout << endl;
v = {1,2,3,4,5};
rotate(v.rbegin(),v.rbegin()+ 1, v.rend()); // 반대로 rotate 시키는 경우
for(int i : v) cout << i;
cout << endl<< endl;
}
temp에 잠시 저장해주고, 2차원 배열의 크기를 resize() 해주는 과정이 필요
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void rotate_left_90(vector<vector<int>> &key){
int n = key.size();
int m = key[0].size();
vector<vector<int>> temp(m , vector<int>(n,0));
for( int i =0; i < m; i++){
for(int j=0; j < n; j++){
temp[i][j] = key[j][m-i-1];
}
}
key.resize(m);
key[0].resize(n);
key = temp;
return ;
}
int main(){
vector<vector<int>> v_2d = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
rotate_left_90(v_2d);
for(vector<int> v : v_2d){
for(int i : v) cout << i << " ";
cout << endl;
}
cout << endl;
}
N 으로 계속해서 숫자를 나누어가며, 나머지를 저장해주면 된다. 모두 저장한 뒤 reverse() 해주어야 함.
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n = 111;
int nary = 16;
vector<int> v_nary;
while( n > 1){
v_nary.push_back(n % nary);
n /= nary;
}
if( n == 1) v_nary.push_back(1);
reverse(v_nary.begin(), v_nary.end());
for(int i : v_nary){
if(i > 10) cout << char( i + 55);
else cout << i;
}
}
10진법 이상으로 넘어가주면 영어로 표현해 주어야 한다.