Algorithm/프로그래머스

[프로그래머스] 행렬 테두리 회전하기 ( 자바) / 구현

미스터로즈 2021. 10. 16. 21:11

문제

 

제한 사항

 

입출력

 

문제풀이

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][columns];
        int tmp =1;
        for(int i = 0 ; i < rows;i++){
            for(int j = 0 ; j < columns;j++){
                arr[i][j]=tmp;
                tmp++;
            }
        }
        int x1=0,x2=0,y1=0,y2=0;
        for(int t = 0 ; t < queries.length;t++){
            x1 = queries[t][0]-1;
            y1 = queries[t][1]-1;
            x2 = queries[t][2]-1;
            y2 = queries[t][3]-1;
            int min = arr[x1][y1];
            int temp = arr[x1][y1];
            
            // 첫번째 세로
            for(int i = x1;i<x2;i++){
                arr[i][y1]=arr[i+1][y1];
                min = Math.min(arr[i][y1],min);
            }
            // 첫번째 가로
            for(int i = y1;i<y2;i++){
                arr[x2][i]=arr[x2][i+1];
                min = Math.min(arr[x2][i],min);
            }
            // 두번째 세로
            for(int i = x2;i>x1;i--){
                arr[i][y2]=arr[i-1][y2];
                min = Math.min(arr[i][y2],min);
            }
            // 두번째 가로
            for(int i = y2;i>y1+1;i--){
                arr[x1][i]=arr[x1][i-1];
                min = Math.min(arr[x1][i],min);
            }
            arr[x1][y1+1]=temp;
            answer[t]=min;
        }
        
        return answer;
    }
}

 

※ 내 생각

이 문제는 구현을 하는 문제입니다.

먼저 주어진 크기 만큼의 배열을 만들어 줍니다.
그리고 for문을 이용해서 queries 의 각각의 원소의 좌표를 얻습니다.
얻어낸 좌표를 통해서 상 하 좌 우 각각을 for문을 이용하여 한칸씩 옴겨줍니다.
옴겨지는 과정에서 최솟값을 파악하고 작업이 끝나면 answer에 값을 넣어줍니다.