Deep Learning study

백준 17406문제 본문

백준 문제 코드

백준 17406문제

HwaniL.choi 2019. 12. 7. 14:45
반응형
#include <bits/stdc++.h>
using namespace std;

int A[50][50],N,M,K,ANS = 1e9; 
vector<int> order;

struct{
    int r,c,s;
}rot[6];

void go(int r, int c, int s){

    if(!s) return;

    int sr = r - s, sc = c - s, er = r + s, ec = c + s;
    int x = A[sr][sc], y = A[sr][ec], z = A[er][ec], w = A[er][sc];

    for(int i = sr ; i < er ; i++)
        if(i == er-1) A[i][sc] = w;
        else A[i][sc] = A[i+1][sc];

    for(int i = ec ; i > sc ; i--)
        if(i==sc+1) A[sr][i] = x;
        else A[sr][i] = A[sr][i-1];

    for(int i = er ; i > sr ; i--)
        if(i == sr +1) A[i][ec] = y;
        else A[i][ec] = A[i-1][ec];

    for(int i = sc ; i < ec ; i++)
        if(i==ec-1) A[er][i] = z;
        else A[er][i] = A[er][i+1];

    go(r,c,s-1);
}

int solve(){
    int T[55][55] = {0,};
    memcpy(T, A, sizeof(A));
    for(int i=0 ; i<K ; i++){
        int n = order[i];
        go(rot[n].r,rot[n].c, rot[n].s);
    }

    int ret = 1e9;

    for(int i=0 ;i<N ; i++){
        int sum = 0;
        for(int j=0 ; j<M ; j++) sum+=A[i][j];
        ret = min(ret, sum);
    }
    memcpy(A, T, sizeof(A));
    return ret;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin >> N >> M >> K;

    for(int i=0 ; i<N ; i++)
        for(int j=0 ;j<M ; j++)
            cin >> A[i][j];
    order.resize(K);
    for(int i=0 ; i<K ; i++){
        int r,c,s; cin >> r >> c >> s;
        rot[i].r = r-1;
        rot[i].c = c-1;
        rot[i].s = s;
        order[i] = i;
    }
    
    do{
        ANS = min(ANS, solve());
    }while(next_permutation(order.begin(),order.end()));

    cout << ANS;

    return 0;
}

백준 배열돌리기4 문제 풀이입니다.

 

.. 요즘 머리가 굳었느지 자꾸 이상한 실수한다... 인덱스라던가... 

반응형

'백준 문제 코드' 카테고리의 다른 글

백준 17135문제  (0) 2019.12.08
백준 3945문제  (0) 2019.12.08
백준 17471문제  (0) 2019.12.07
백준 16637문제  (0) 2019.12.05
백준 17281문제  (0) 2019.11.24
Comments