241124 4번연산까지 함.
- 3번과 4번은 가로와 세로 가 뒤집어져야 한다.
-> 이거를 어디서 보고 판단했냐면, 출력 3번과 4번인데...
만약에 가로 세로가 동일하다면 절대로 찾을 수 없다....
그렇다면 어떻게 판단해야 하냐면 직사각형을 그리고 , 회전을 하면
어떻게 될까???? 를 생각해야 한다.
#include <vector>
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <algorithm>
#include <unordered_map>
using namespace std;
int main()
{
//for(int i ~
// for(int j 라고 하고 생각하자.
// -1은 디폴트
// [i][j] = [n - 1 - i][j]
int n, m, r;
cin >> n >> m >> r;
vector<vector<int>> v(n, vector<int>(m));
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
cin >> v[i][j];
}
}
vector<vector<int>> vTemp;
for (int i = 0; i < r; ++i)
{
int cnt;
cin >> cnt;
switch (cnt)
{
case 1:
vTemp.resize(n, vector<int>(m));
// 상하 반전
for (int i = 0; i < n / 2; ++i)
{
for (int j = 0; j < m; ++j)
{
vTemp[i][j] = v[n - 1 - i][j];
vTemp[n - 1 - i][j] = v[i][j];
}
}
break;
case 2:
// 좌우 반전.
// [i][j] = [i][m - 1 - j]
vTemp.resize(n, vector<int>(m));
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
{
vTemp[i][j] = v[i][m - 1 - j];
vTemp[i][m - 1 - j] = v[i][j];
}
}
break;
case 3:
// 출력3번을 보고 변경함.
vTemp.resize(m, vector<int>(n));
// 가로와 세로가 변경되는 구조이다.
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
// 이 점화식은 그대로 가지고 가야 한다.
vTemp[i][j] = v[n - 1 - j][i];
//[0][0] = [n - 1][0]
//[0][1] = [n - 1 - 1][0]
//[0][2] = [n - 1 - 2][0]
//[1][0] = [n - 1][1]
//[1][1] = [n - 1 - 1][1]
//[1][2] = [n - 1 - 2][1]
}
}
break;
case 4:
vTemp.resize(m, vector<int>(n));
// 가로와 세로가 변경되는 구조이다.
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
// 이 점화식은 그대로 가지고 가야 한다.
vTemp[i][j] = v[j][m - i - 1];
// 행인 m으로 해야 한다.
// [0][0] = [0][m - 1]
// [0][1] = [1][m - 1]
// [0][2] = [2][m - 1]
// [1][0] = [0][m - 1 - 1]
// [1][1] = [1][m - 1 - 1]
// [1][2] = [2][m - 1 - 1]
}
}
break;
case 5:
break;
case 6:
break;
}
//v = vTemp;
}
int colSize = vTemp.size();
int rowSize = vTemp[0].size();
cout << endl;
for (int i = 0; i < colSize; ++i)
{
for (int j = 0; j < rowSize; ++j)
{
cout << vTemp[i][j] << " ";
}
cout << endl;
}
}