즌쯔 개쁙츠느..
어렵지는 않았는데 너무 귀찮고 복잡하고 생각하기 머리 아팠다
이 문제 코딩부터 하면 백퍼 꼬인다 싶어서 먼저 적어놓고 풀었다.
1 - 4번까지는 괜찮았음 근데 5 - 6번이 눈물난다... ㅠ_____ㅜ
그림처럼 순서 적어가면서 구현했다.
구현은 tmp 배열을 하나 만든 다음에 이 배열에 변경한 배열을 옮겨둔다.
다 끝나면 다시 tmp배열에 있던 걸 v에 옮긴다.
이 문제 한 번 틀릴 뻔했는데 3번처럼 n * m이 m * n 형태로 바뀌는 걸 고려 안 했다.
수정하고 나서는 문제 없었음
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
int v[105][105];
int n, m;
void print()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("%d ", v[i][j]);
}
printf("\n");
}
}
void func1()
{
int tmp[105][105];
for (int i = n - 1, k = 0; i >= 0; i--, k++)
{
for (int j = 0, l = 0; j < m; j++, l++)
tmp[k][l] = v[i][j];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
v[i][j] = tmp[i][j];
}
}
void func2()
{
int tmp[105][105];
for (int i = 0, k = 0; i < n; i++, k++)
{
for (int j = m-1, l = 0; j >= 0; j--, l++)
tmp[k][l] = v[i][j];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
v[i][j] = tmp[i][j];
}
}
void func3()
{
int tmp[105][105];
for (int i = 0, k = 0; i < m; i++, k++)
{
for (int j = n-1, l = 0; j >= 0; j--, l++)
tmp[k][l] = v[j][i];
}
int t = n;
n = m;
m = t;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
v[i][j] = tmp[i][j];
}
}
void func4()
{
int tmp[105][105];
for (int i = m - 1, k = 0; i >= 0; i--, k++)
{
for (int j = 0, l = 0; j < n; j++, l++)
tmp[k][l] = v[j][i];
}
int t = n;
n = m;
m = t;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
v[i][j] = tmp[i][j];
}
}
void func5()
{
int tmp[105][105];
bool ligth = true;
for (int i = 0, k = 0, l = 0; i < n / 2; )
{
for (int j = 0; j < m / 2; j++, l++)
{
if (ligth)
tmp[k][l] = v[i + n / 2][j];
else
tmp[k][l] = v[i][j];
}
if (ligth)
ligth = false;
else
{
ligth = true;
l = 0;
k++;
i++;
}
}
ligth = true;
for (int i = 0, k = n / 2, l = 0; i < n / 2; )
{
for (int j = m / 2; j < m; j++, l++)
{
if (ligth)
tmp[k][l] = v[i + n / 2][j];
else
tmp[k][l] = v[i][j];
}
if (ligth)
ligth = false;
else
{
ligth = true;
l = 0;
i++;
k++;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
v[i][j] = tmp[i][j];
}
}
void func6()
{
int tmp[105][105];
bool ligth = false;
for (int i = 0, k = 0, l = 0; i < n / 2; )
{
for (int j = m / 2; j < m; j++, l++)
{
if (ligth)
tmp[k][l] = v[i + n / 2][j];
else
tmp[k][l] = v[i][j];
}
if (!ligth)
ligth = true;
else
{
ligth = false;
l = 0;
k++;
i++;
}
}
ligth = false;
for (int i = 0, k = n / 2, l = 0; i < n / 2; )
{
for (int j = 0; j < m / 2; j++, l++)
{
if (ligth)
tmp[k][l] = v[i + n / 2][j];
else
tmp[k][l] = v[i][j];
}
if (!ligth)
ligth = true;
else
{
ligth = false;
l = 0;
i++;
k++;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
v[i][j] = tmp[i][j];
}
}
int main()
{
int r;
cin >> n >> m >> r;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cin >> v[i][j];
}
for (int i = 0; i < r; i++)
{
int a;
cin >> a;
switch (a)
{
case 1:
func1();
break;
case 2:
func2();
break;
case 3:
func3();
break;
case 4:
func4();
break;
case 5:
func5();
break;
case 6:
func6();
break;
}
}
print();
return 0;
}
'백준' 카테고리의 다른 글
16926 배열 돌리기 1 (0) | 2020.09.19 |
---|---|
17502 클레어와 팰린드롬 (0) | 2020.09.19 |
1012 유기농 배추 (0) | 2020.09.16 |
1094 막대기 (0) | 2020.09.16 |
6246 풍선 놀이 (0) | 2020.09.16 |