[ BOJ / C++ ] 16926번 배열 돌리기1

황승환·2021년 8월 11일
0

C++

목록 보기
35/65

이번 문제는 특정 알고리즘을 사용하지 않고 구현하는 문제였다.

  • 4개의 꼭지점의 좌표를 저장한다.
  • 4개의 좌표를 이용하여 좌표를 r번 이동시킨다.
  • 이동이 끝나면 4개의 꼭지점을 안쪽으로 한칸씩 이동시켜 안쪽 배열을 돌린다.
  • 이를 반복한다.

Code

#include <iostream>
#define MAX 301
using namespace std;

int n,m,r;
int arr[MAX][MAX];
int result[MAX][MAX];

void Input(){
    cin>>n>>m>>r;
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            cin>>arr[i][j];
        }
    }
}

void Solution(){
    while(r--){
        int y1=0, x1=0;
        int y2=0, x2=m-1;
        int y3=n-1, x3=m-1;
        int y4=n-1, x4=0;
        while(y1<y4&&x1<x2){
            int temp=arr[y1][x1];
            for(int i=x1; i<x2; i++){
                arr[y1][i] = arr[y1][i+1];
            }
            for(int i=y2; i<y3; i++){
                arr[i][x2] = arr[i+1][x2];
            }
            for(int i=x3; i>x4; i--){
                arr[y3][i] = arr[y3][i-1];
            }
            for(int i=y4; i>y1; i--){
                arr[i][x4] = arr[i-1][x4];
            }
            arr[y1+1][x4] = temp;
            y1++;
            x1++;
            y2++;
            x2--;
            y3--;
            x3--;
            y4--;
            x4++;
        }
    }
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Input();
    Solution();
    return 0;
}

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글