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

꿀이·2022년 6월 4일
0

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

풀이

회전을 어떻게 할지에 대한 문제 배열 원소 하나하나씩 옮겨줬다.
기준점을 잡고 해당 원소는 따로 보관하고 그자리로 다 밀어서 옮겨줬다.
마지막 보관하고 있던 값을 들어가야할 위치에 넣어준다.

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        
        int[][] map = new int[rows+1][columns+1];
        int val = 1;
        for(int i = 1 ; i<=rows ; i++){
            for(int j =1 ; j<= columns ; j++){
                map[i][j] = val++;
            }
        }
        
        
        for(int t = 0 ; t < queries.length ; t++){
            int sy = queries[t][0];
            int sx = queries[t][1];
            int ey = queries[t][2];
            int ex = queries[t][3];
            int minVal = map[sy][sx];
            
            
            int tmp = map[sy][sx];
            // 왼쪽 면
            for(int i = sy; i< ey ;i++){
                minVal = minVal > map[i+1][sx] ? map[i+1][sx] : minVal;
                map[i][sx] = map[i+1][sx];
            }
            // 아랫 면
            for(int i = sx ; i < ex ; i++){
                minVal = minVal > map[ey][i+1] ? map[ey][i+1] : minVal;
                map[ey][i] = map[ey][i+1];
            }
            // 오른쪽 면
            for(int i = ey ; i> sy ; i--){
                minVal = minVal > map[i-1][ex] ? map[i-1][ex] : minVal;
                map[i][ex] = map[i-1][ex];
            }
            //윗쪽 면
            for(int i = ex ; i> sx ; i--){
                minVal = minVal > map[sy][i-1] ? map[sy][i-1] : minVal;
                map[sy][i] = map[sy][i-1];
            }
            
            map[sy][sx+1] = tmp;
            answer[t] = minVal;
            
        }
        
        
        return answer;
    }
}
profile
내게 맞는 옷을 찾는중🔎

0개의 댓글