본문 바로가기

PS

[ 백준 / C++ ] 16926 : 배열 돌리기 1

[ 문제 ]

 

16926번: 배열 돌리기 1

 

[ 접근방법 ]

 

제일 바깥 테두리부터 시작하여 안쪽으로 들어가며 회전 결과를 저장하였다.

 

테두리에 속하는 숫자들을 큐에 넣은 후, 큐 앞의 숫자들을 뒤에 넣음으로써 회전을 처리했다.

 

[ 소스코드 ]

 

#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;

int n, m, t;
int arr[305][305], brr[305][305];

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m >> t;

    for(int i = 0; i < n; i++)for(int j = 0; j < m; j++)cin >> arr[i][j];

    for(int i = 0; i < min(n, m) / 2; i++){
        queue<int> que;
        for(int j = i; j < m - i - 1; j++)que.push(arr[i][j]);
        for(int j = i; j < n - i - 1; j++)que.push(arr[j][m - i - 1]);
        for(int j = m - i - 1; j > i; j--)que.push(arr[n - i - 1][j]);
        for(int j = n - i - 1; j > i; j--)que.push(arr[j][i]);

        for(int j = 0; j < t; j++){
            que.push(que.front());
            que.pop();
        }

        for(int j = i; j < m - i - 1; j++){
            brr[i][j] = que.front();
            que.pop();
        }
        for(int j = i; j < n - i - 1; j++){
            brr[j][m - i - 1] = que.front();
            que.pop();
        }
        for(int j = m - i - 1; j > i; j--){
            brr[n - i - 1][j] = que.front();
            que.pop();
        }
        for(int j = n - i - 1; j > i; j--){
            brr[j][i] = que.front();
            que.pop();
        }
    }

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            cout << brr[i][j] << " ";
        }
        cout << "\n";
    }

    return 0;
}

'PS' 카테고리의 다른 글

[ 백준 / C++ ] 2965 : 캥거루 세마리  (0) 2025.01.15
[ 백준 / C++ ] 2661 : 좋은수열  (0) 2025.01.14
[ 백준 / C++ ] 2212 : 센서  (0) 2025.01.09
[ 백준 / C++ ] 1783 : 병든 나이트  (0) 2025.01.08
[ 백준 / C++ ] 19237 : 어른 상어  (0) 2025.01.06