[Programmers] 2021 Dev-Matching: 웹 백엔드 개발자(상반기) - 행렬 테두리 회전하기

zzenee·2022년 9월 27일
0

Algorithm&Coding-test

목록 보기
24/30
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/77485?language=java

Problem

Code

import java.util.*;

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        
        int[][] arr = new int[rows+1][columns+1];
        for(int i=1; i<=rows; i++) {
            for (int j=1; j<=columns; j++) {
                arr[i][j] = (i-1)*columns + j;
            }
        }
        
        int x1, y1, x2, y2, min, tmp;
        for (int i=0; i<queries.length; i++) {
            x1=queries[i][0];
            y1=queries[i][1];
            x2=queries[i][2];
            y2=queries[i][3];
            tmp = arr[x1][y1];
            min = tmp;
            for (int j=x1; j<x2; j++) {
                arr[j][y1] = arr[j+1][y1];
                min = Math.min(min, arr[j+1][y1]);
            }
            for (int k=y1; k<y2; k++) {
                arr[x2][k] = arr[x2][k+1];
                min = Math.min(min, arr[x2][k+1]);
            }
            for (int l=x2; l>x1; l--) {
                arr[l][y2] = arr[l-1][y2];
                min = Math.min(min, arr[l-1][y2]);
            }
            for (int m=y2; m>y1; m--) {
                arr[x1][m] = arr[x1][m-1];
                min = Math.min(min, arr[x1][m-1]);
            }
            arr[x1][y1+1] = tmp;
            answer[i] = min;
        }
        
        return answer;
    }
}

Result

Note

시계반대방향으로 돌면서 값을 변화시키면 데이터 유실없이 변화 가능

profile
꾸준히

0개의 댓글