티스토리 뷰

문제

https://school.programmers.co.kr/learn/courses/30/lessons/77485?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 




정답

특별한 알고리즘 없이 조건에 맞게 구현을 해주면 되는 문제이다.

회전을 어떻게 시계방향으로 줄지 여부를 파악하여 풀면 된다.

필자는 회전하는 값들을 배열에 담아 sorting 후 첫 번째 값을 answer 배열에 넣어주었다.

 

import java.util.ArrayList;
import java.util.Collections;


 class Solution {
    static int[][] matrix ;
    static int cL;

    public static int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];

        matrix = new int[rows][columns];

        //행렬 초기화
        for (int i = 0 ; i < rows; i++){
            for (int j = 0 ; j < columns; j++){
                matrix[i][j] = i*columns + j + 1;
            }
        }

        for (int i = 0 ; i < queries.length; i++){
            answer[i] = rotate(queries[i]);
        }


         return answer;
    }

    public static int rotate(int[]query){

        ArrayList<Integer> arrayList = new ArrayList<>();
       
        cL = matrix[query[0]-1][query[1]-1];
        
        for (int i = 1 ; i <= query[3]-query[1] ; i++){ 
            int tmp = matrix[query[0]-1][query[1]+i-1]; 
            arrayList.add(tmp);
            matrix[query[0]-1][query[1]+i-1] = cL;
            cL = tmp;
        }

   
        for (int i = 1 ; i <= query[2]-query[0]; i++){ 
           
            int tmp = matrix[query[0]-1+i][query[3]-1]; 
            arrayList.add(tmp);
            matrix[query[0]-1+i][query[3]-1] = cL;
            cL = tmp;
        }

       
        for (int i = query[3]-1; i > query[1]-1; i--){
           
            int tmp = matrix[query[2]-1][i-1];  
            arrayList.add(tmp);
            matrix[query[2]-1][i-1] = cL;
            cL = tmp;
        }

       
        for (int i = query[2]-1; i > query[0]-1; i--){ 
          
            int tmp = matrix[i-1][query[1]-1]; 
            arrayList.add(tmp);
            matrix[i-1][query[1]-1] = cL;
            cL = tmp;
        }

        Collections.sort(arrayList);
        return  arrayList.get(0);
    }

}