๋ฐฐ์ด ํ์
๐โโ๏ธ๋ฐฐ์ด ํ์
1์ฐจ์ ๋ฐฐ์ด ํ์ ๊ณผ 2์ฐจ์ ๋ฐฐ์ด ํ์ ์ ๋ํด ์์๋ณด์.
๐1์ฐจ์ ๋ฐฐ์ด ํ์
์ฒซ๋ฒ์งธ๋ rotate()๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค.
ForwardIterator rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);
rotate์๋ ํ์ ๊ตฌ๊ฐ์ธ [first,last)๋ฅผ ๋ฃ๊ณ ์ผ๋ง๋ ํ์ ํ ์ง ๊ฐ์ ๋ฃ์ผ๋ฉด ๋๋ค.
๋ฐ์๊ณ ๋ฐฉํฅ ํ์ ์์
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> v = {1, 2, 3, 4, 5, 6};
rotate(v.begin(), v.begin() + 1, v.end());
for(int i : v) cout << i << ' ';
}
/*
2 3 4 5 6 1
*/
2์นธ ๋ฐ์๊ณ ๋ฐฉํฅ ํ์ ์์
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int main(){
vector<int> v = {1, 2, 3, 4, 5, 6};
rotate(v.begin(), v.begin() + 2, v.end());
for(int i : v) cout << i << ' ';
}
// 3 4 5 6 1 2
์ค๊ฐ ์ง์ ํ์ ์์
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int main(){
vector<int> v = {1, 2, 3, 4, 5, 6};
rotate(v.begin() + 1, v.begin() + 2, v.begin() + 5);
for(int i : v) cout << i << ' ';
}
// 1 3 4 5 2 6
๋ฐ์๊ณ ๋ฐฉํฅ ํ์ ์ begin, end๋ฅผ ์ฌ์ฉํ์ง๋ง ์๊ณ ๋ฐฉํฅ ํ์ ์ rbegin, rend๋ฅผ ์ฌ์ฉํ๋ค.
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> v = {1, 2, 3, 4, 5, 6};
rotate(v.rbegin(), v.rbegin() + 1, v.rend());
for(int i : v) cout << i << ' ';
}
/*
6 1 2 3 4 5
*/
rotate()๋ [first, last) ์์ญ์ ์์ ์ค [first, middel) ์ [middle, last) ๋ค์ ๋๋ ํจ์์ ๋๋ค.
๐2์ฐจ์ ๋ฐฐ์ด ํ์
2์ฐจ์ ๋ฐฐ์ด ํ์ ์ ์ง์ ๊ตฌํํด์ ์ฌ์ฉํ๋ค.
์ผ์ชฝ 90๋ ํ์ ํจ์.
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;
}
์ค๋ฅธ์ชฝ 90๋ ํ์ ํจ์.
void rotate_right_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[n - j - 1][i];
}
}
key.resize(m);
key[0].resize(n);
key = temp;
return;
}
์์ ๊ฒฝ์ฐ๋ n, m์ ๊ฐ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ์ ํด๋นํ๋ค.
n, m์ด ๊ฐ๋ค๋ฉด resizeํด์ฃผ๋ ๋ถ๋ถ์ด ์ฌ๋ผ์ง๋ฏ๋ก ์กฐ๊ธ ๋ ๊ฐ๊ฒฐํด์ง๋ค.
n, m์ด ๊ฐ์ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ 90๋ ํ์ ํจ์.
void rotate_right_90(vector<vector<int>> &key){
vector<vector<int>> temp(n, vector<int>(n, 0));
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
temp[i][j] = key[n - j - 1][i]; // ์ด ๋ถ๋ถ์ ๊ณต์์ฒ๋ผ ์ธ์ฐ์.
}
}
key = temp;
return;
}
๐2์ฐจ์ ๋ฐฐ์ด ๋์นญ
๋ง์ฝ 2์ฐจ์ ๋ฐฐ์ด์ ๋์นญํ๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น?
๊ฐ์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ค๋นํ ํ, ij๋ฅผ ๋ฐ๊พธ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
b[j][i] = v[i][j];
}
}