No Rules Rules

배열 돌리기 3 (feat. 백준, 16935번) 본문

생활/코테

배열 돌리기 3 (feat. 백준, 16935번)

개발하는 완두콩 2023. 2. 16. 11:59
728x90
반응형

배열 돌리기 3
https://www.acmicpc.net/problem/16935

 

16935번: 배열 돌리기 3

크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 →

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
int N, M, R, A[101][101], tmp[101][101];
void func1(){
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            tmp[i][j] = A[N - 1 - i][j];
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            A[i][j] = tmp[i][j];
}
void func2(){
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            tmp[i][j] = A[i][M - 1 - j];
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            A[i][j] = tmp[i][j];
}
void func3(){
    register int t = N;
    swap(N, M);
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            tmp[i][j] = A[t - 1 - j][i];
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            A[i][j] = tmp[i][j];
}
void func4(){
    register int t = M;
    swap(N, M);
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            tmp[i][j] = A[j][t - 1 - i];
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            A[i][j] = tmp[i][j];
}
void func5(){
    register int n = N / 2, m = M / 2;
    for(register int i = 0, j; i < n; ++i)
        for(j = 0; j < m; ++j)
            tmp[i][j + m] = A[i][j];
    for(register int i = 0, j; i < n; ++i)
        for(j = 0; j < m; ++j)
            tmp[i + n][j + m] = A[i][j + m];
    for(register int i = 0, j; i < n; ++i)
        for(j = 0; j < m; ++j)
            tmp[i + n][j] = A[i + n][j + m];
    for(register int i = 0, j; i < n; ++i)
        for(j = 0; j < m; ++j)
            tmp[i][j] = A[i + n][j];
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            A[i][j] = tmp[i][j];
}
void func6(){
    register int n = N / 2, m = M / 2;
    for(register int i = 0, j; i < n; ++i)
        for(j = 0; j < m; ++j)
            tmp[i + n][j + m] = A[i + n][j];
    for(register int i = 0, j; i < n; ++i)
        for(j = 0; j < m; ++j)
            tmp[i][j + m] = A[i + n][j + m];
    for(register int i = 0, j; i < n; ++i)
        for(j = 0; j < m; ++j)
            tmp[i + n][j] = A[i][j];
    for(register int i = 0, j; i < n; ++i)
        for(j = 0; j < m; ++j)
            tmp[i][j] = A[i][j + m];
    for(register int i = 0, j; i < N; ++i)
        for(j = 0; j < M; ++j)
            A[i][j] = tmp[i][j];
}
int main()
{
    ios::sync_with_stdio(false), cin.tie(NULL);
    cin >> N >> M >> R;
    for(register int n = 0, m; n < N; ++n)
        for(m = 0; m < M; ++m)
            cin >> A[n][m];
    while(R--){
        register int t;
        cin >> t;
        if(t == 1)
            func1();
        else if(t == 2)
            func2();
        else if(t == 3)
            func3();
        else if(t == 4)
            func4();
        else if(t == 5)
            func5();
        else
            func6();
    }
	for(register int i = 0, j; i < N; ++i){
        for(j = 0; j < M; ++j)
            cout << A[i][j] << " ";
        cout << "\n";
    }
	return 0;
}
// *&)*@*

 

반응형

구현 유형의 문제라 시간은 오래 걸리지만 하나하나 뜯어서 생각해보면 구현 자체는 쉬운 문제입니다.

728x90
반응형
Comments