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

MINSANG YU·2022년 9월 1일
0

프로그래머스

목록 보기
3/15
post-thumbnail

문제 링크

핵심

테두리의 한 변당 for문을 1개씩 써서 하나하나 모두 옮겨주는 방식으로 구현했다. 추가적으로 각 변을 탐색할 때 숫자의 최소값을 찾아 answer 배열에 추가해주었다.

class Solution {
    
    static int[][] arr;
    
    static int rotate(int x1, int y1, int x2, int y2) {
        
        int min = Integer.MAX_VALUE/2;
        
        int[][] copy = new int[arr.length][arr[0].length];
        for(int i=0; i<arr.length; i++) {
            for(int j=0; j<arr[i].length; j++) {
                copy[i][j] = arr[i][j];
            }
        }
        
        for(int c=y1+1; c<=y2; c++) {
            arr[x1][c] = copy[x1][c-1];
            if(arr[x1][c]<min) min = arr[x1][c];
        }
        for(int r=x1+1; r<=x2; r++) {
            arr[r][y2] = copy[r-1][y2];
            if(arr[r][y2]<min) min = arr[r][y2];
        }
        for(int c=y2-1; c>=y1; c--) {
            arr[x2][c] = copy[x2][c+1];
            if(arr[x2][c]<min) min = arr[x2][c];
        }
        for(int r=x2-1; r>=x1; r--) {
            arr[r][y1] = copy[r+1][y1];
            if(arr[r][y1]<min) min = arr[r][y1];
        }
        
        return min;
    }
    
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        arr = new int[rows+1][columns+1];
        
        int cnt = 0;
        for(int i=0; i<rows; i++) {
            for(int j=0; j<columns; j++) {
                arr[i+1][j+1] = ++cnt;
            }
        }
        
        for(int i=0; i<queries.length; i++) {
            int min = rotate(queries[i][0],queries[i][1],queries[i][2],queries[i][3]);
            
            answer[i] = min;
        }
        
        
        return answer;
    }
}

행렬 돌리기는 이 문제처럼 메인으로 다루기보다는 구현 문제의 일부로 종종 나오기 때문에 여러번 익혀보는 것이 좋을 것 같다. (여러 문제를 풀어본 결과 단순히 반복문을 여러개 나열해서 구현 하는게 시간상으로 제일 편한 듯..?)

profile
쉿! 공부중

0개의 댓글