알고리즘
백준_16935_배열 돌리기 3
shj718
2022. 2. 15. 13:33
문제 링크: https://www.acmicpc.net/problem/16935
나머지 연산들은 단순했고, 3번 연산(오른쪽으로 90도 회전)과 4번 연산(왼쪽으로 90도 회전)은 생각이 필요했다.
#include <iostream>
#include <algorithm>
#define A_MAX 100
using namespace std;
int N, M, R, A[A_MAX][A_MAX], F, tmp[A_MAX][A_MAX]; // 가로 N, 세로 M, 연산 개수 R, 배열 A (N, M은 짝수)
void func1() {
int tmp_x;
for (int i = 0; i < N / 2; i++) {
for (int j = 0; j < M; j++) {
tmp_x = A[i][j];
A[i][j] = A[N - 1 - i][j];
A[N - 1 - i][j] = tmp_x;
}
}
}
void func2() {
int tmp_x;
for (int j = 0; j < M / 2; j++) {
for (int i = 0; i < N; i++) {
tmp_x = A[i][j];
A[i][j] = A[i][M - 1 - j];
A[i][M - 1 - j] = tmp_x;
}
}
}
void func3() {
int tmpN;
tmpN = N;
swap(N, M);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
tmp[i][j] = A[tmpN - 1 - j][i];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
A[i][j] = tmp[i][j];
}
}
}
void func4() {
int tmpM;
tmpM = M;
swap(N, M);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
tmp[i][j] = A[j][tmpM - 1 - i];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
A[i][j] = tmp[i][j];
}
}
}
void func5() {
for (int i = 0; i < N / 2; i++) { //1 -> 2
for (int j = 0; j < M / 2; j++) {
tmp[i][j + M / 2] = A[i][j];
}
}
for (int i = 0; i < N / 2; i++) { //2 ->3
for (int j = M / 2; j < M; j++) {
tmp[i + N / 2][j] = A[i][j];
}
}
for (int i = N / 2; i < N; i++) { //3->4
for (int j = M / 2; j < M; j++) {
tmp[i][j - M / 2] = A[i][j];
}
}
for (int i = N / 2; i < N; i++) { //4->1
for (int j = 0; j < M / 2; j++) {
tmp[i - N / 2][j] = A[i][j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
A[i][j] = tmp[i][j];
}
}
}
void func6() {
for (int i = 0; i < N / 2; i++) { //4 <- 1
for (int j = 0; j < M / 2; j++) {
tmp[i + N / 2][j] = A[i][j];
}
}
for (int i = N / 2; i < N; i++) { //3 <- 4
for (int j = 0; j < M / 2; j++) {
tmp[i][j + M / 2] = A[i][j];
}
}
for (int i = N / 2; i < N; i++) { //2 <- 3
for (int j = M / 2; j < M; j++) {
tmp[i - N / 2][j] = A[i][j];
}
}
for (int i = 0; i < N / 2; i++) { //1 <- 2
for (int j = M / 2; j < M; j++) {
tmp[i][j - M / 2] = A[i][j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
A[i][j] = tmp[i][j];
}
}
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> N >> M >> R;
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++) {
cin >> A[i][j];
}
}
for (i = 0; i < R; i++) {
cin >> F;
switch (F) {
case 1:
func1();
break;
case 2:
func2();
break;
case 3:
func3();
break;
case 4:
func4();
break;
case 5:
func5();
break;
case 6:
func6();
break;
}
}
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++) {
cout << A[i][j] << ' ';
}
cout << '\n';
}
return 0;
}