본문 바로가기
알고리즘/알고리즘

[JAVA] 프로그래머스 : 행렬 테두리 회전하기

by 두둠칫 2022. 8. 2.

https://school.programmers.co.kr/learn/courses/30/lessons/77485

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

1. 단순 시뮬레이션 문제

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int q = queries.length;
        int[] answer = new int[q];
        
        int[][] arr = new int[rows][columns];
        for(int i=0; i<rows; i++){
            for(int j=0; j<columns; j++){
                arr[i][j] = (i*columns)+(j+1);
            }
        }
        // int val = 1; 두고 arr[i][j] = val++; 해도된다.
        
        for(int i=0; i<q; i++){
            // r:c = x:y
            int x1=queries[i][0]-1, y1=queries[i][1]-1, x2=queries[i][2]-1, y2=queries[i][3]-1;
            
            int e1, min, tmp;
            
            // 반시계
            min = arr[x1][y1];
            e1 = arr[x1][y1];
            
            // x1y1 -> x2y1
            for(int j=x1; j<x2; j++){
                arr[j][y1] = arr[j+1][y1];
                min = Math.min(min, arr[j+1][y1]);
            }
            
            // x2y1 -> x2y2
            for(int j=y1; j<y2; j++){
                arr[x2][j] = arr[x2][j+1];
                min = Math.min(min, arr[x2][j+1]);
            }
            
            // x2y2 -> x1y2
            for(int j=x2; j>x1; j--){
                arr[j][y2] = arr[j-1][y2];
                min = Math.min(min, arr[j-1][y2]);
            }
            
            // x1y2 -> x1y1
            for(int j=y2; j>y1+1; j--){
                arr[x1][j] = arr[x1][j-1];
                min = Math.min(min, arr[x1][j-1]);
            }
            arr[x1][y1+1] = e1;
            
            answer[i] = min;
        }
        
        
        
        return answer;
    }
}