No Rules Rules

배열 돌리기 1 (feat. 백준, 16926번) 본문

생활/코테

배열 돌리기 1 (feat. 백준, 16926번)

개발하는 완두콩 2023. 2. 15. 13:18
728x90
반응형

배열 돌리기 1
https://www.acmicpc.net/problem/16926

 

16926번: 배열 돌리기 1

크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <math.h>
using namespace std;
int N, M, R, A[301][301], tmp[301][301];
void rotate(){
    for(register int r = 0, i, j, x1, y1, x2, y2, ix; r < R; ++r){
        for(i = 0; i < min(N, M) / 2; ++i){
            x1 = i, y1 = i, x2 = N - 1 - i, y2 = M - 1 - i;
            //좌
            for(ix = y2 - 1; ix >= y1; --ix)
                tmp[x1][ix] = A[x1][ix + 1];
            //하
            for(ix = x1 + 1; ix <= x2; ++ix)
                tmp[ix][y1] = A[ix - 1][y1];
            //우
            for(ix = y1 + 1; ix <= y2; ++ix)
                tmp[x2][ix] = A[x2][ix - 1];
            //상
            for(ix = x2 - 1; ix >= x1; --ix)
                tmp[ix][y2] = A[ix + 1][y2];
        }
        for(i = 0; 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];
    rotate();
    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