본문 바로가기

백준

16926 배열 돌리기 1

 

배열 좀 그만 돌려ㅜㅜ

 

 

 

와ㅋㅋ 이 문제 풀 때 종만북 재귀로 순열 풀던 거 생각났다. 

 

한 부분이 반복될 때 그걸 따로 빼서 재귀로 돌리는거... 

 

그래서 배열 한 줄 돌리는 부분을 함수로 만들고 재귀로 풀었다!

 

뿌듯스 ^____^

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <bitset>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;

int n, m;
int v[300][300];
int tmp[300][300];

void rotate(int now, int depth)
{
    if (now == depth)
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
                v[i][j] = tmp[i][j];
        }
        return;
    }

    int s = now, eN = n - now, eM = m - now;

    for (int i = s; i < eN - 1; i++)
        tmp[i + 1][s] = v[i][s];
    for (int i = s; i < eM - 1; i++)
        tmp[eN - 1][i + 1] = v[eN - 1][i];
    for (int i = eN - 1; i > s; i--)
        tmp[i - 1][eM - 1] = v[i][eM - 1];
    for (int i = eM - 1; i > s; i--)
        tmp[s][i - 1] = v[s][i];

    rotate(now + 1, depth);
}

int     main()
{
    int r;
    cin >> n >> m >> r;

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

    for (int i = 0; i < r; i++)
    {
        rotate(0, min(n, m) / 2);
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            printf("%d ", tmp[i][j]);
        printf("\n");
    }

    return 0;
}

 


 

 

dh.... 이건 북님 코드

 

완전 깔끔

'백준' 카테고리의 다른 글

18291 비요뜨의 징검다리 건너기  (0) 2020.09.19
5671 호텔 방 번호  (0) 2020.09.19
17502 클레어와 팰린드롬  (0) 2020.09.19
16935 배열 돌리기 3  (0) 2020.09.16
1012 유기농 배추  (0) 2020.09.16