Skip to content

Latest commit

 

History

History
76 lines (61 loc) · 2.11 KB

File metadata and controls

76 lines (61 loc) · 2.11 KB

프로그래머스 Level2 : 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 행렬 테두리 회전하기

import java.util.Queue;
import java.util.LinkedList;
import java.util.ArrayList;
class Solution {
    // 우하좌상
    int[] dirR = {0,1,0,-1};
    int[] dirC = {1,0,-1,0};
    ArrayList<Integer> minNumList = new ArrayList<>();
    
    // 회전 시키기 & 최솟값 찾기
    void rotate(int[][] matrix,int rowSize, int columnSize, int[] query){
        Queue<Integer> tempNum = new LinkedList<>();
        int currR = query[0]-1, currC = query[1]-1; 
        
        int min = matrix[currR][currC];
        tempNum.offer(min);
        
        int move = (rowSize)*2 + (columnSize)*2;
        
        int d = 0, rCnt=0, cCnt=0;    //방향
        int num = 0;
        for(int m=0; m<move; m++){
            num = matrix[currR+dirR[d]][currC+dirC[d]];
            min = min>num? num : min;
            
            tempNum.offer(num);
            matrix[currR+dirR[d]][currC+dirC[d]] = tempNum.poll();
            
            currR += dirR[d];
            currC += dirC[d];
            
            if(d==0 || d==2) cCnt++;
            if(d==1 || d==3) rCnt++;
            
            if(rCnt==rowSize){
                d++;
                rCnt=0;
            }
            if(cCnt==columnSize){
                d++;
                cCnt=0;
            }       
        }    
        minNumList.add(min);
    }
        
    
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        int[][] matrix = new int[rows][columns];
        
        // 행렬 만들기
        int num =1;
        for(int i=0; i<rows; i++){
            for(int j=0; j<columns; j++){
                matrix[i][j] = num++;
            }
        }
        
        // 회전
        for(int[] q : queries){
            rotate(matrix,q[2]-q[0],q[3]-q[1],q);        
        }
        
        for(int i=0; i<minNumList.size(); i++){
            answer[i] = minNumList.get(i);
        }
        return answer;
    }
}