알고리즘

프로그래머스 행렬 테두리 회전하기(JAVA)

박카스마시며코딩 2022. 2. 26. 20:04

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

 

코딩테스트 연습 - 행렬 테두리 회전하기

6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]

programmers.co.kr

 

저는 로테이션을 하면서 최소값을 계속 구하여 문제를 해결하였습니다.

로테이션은 4방향을 while을 통해 조건에 맞을 때 계속 한칸씩 이동하도록 구현하였습니다.

import java.util.*;
class Solution {
    private static int[][] init(int n,int m){
        int[][] arr = new int[n][m];
        int num = 1;
        for(int i = 0 ; i < n ; i++){
            for(int j = 0 ; j < m ; j++){
                arr[i][j] = num++;
            }
        }
        return arr;
    }
    private static int[] dy = {0,1,0,-1};
    private static int[] dx = {1,0,-1,0};
    private static int rotation(int y1,int x1,int y2,int x2,int[][] arr){
        int ny = y1 - 1;
        int nx = x1 - 1;
        int prev = arr[ny][nx];
        int result = prev;
        for(int i = 0 ; i < 4; i++){
            ny += dy[i];
            nx += dx[i];
            while(nx >= x1-1 && nx <= x2-1
                 && ny >= y1-1 && ny <= y2-1){
                int temp = arr[ny][nx];
                arr[ny][nx] = prev;
                prev = temp;
                result = Math.min(prev,result);
                ny += dy[i];
                nx += dx[i];
            }
            ny -= dy[i];
            nx -= dx[i];
        }
        return result;
    }
    private static void print(int n , int m , int[][] arr){
        for(int i = 0 ; i < n ; i++){
            for(int j = 0 ; j < m ; j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
        System.out.println();
    }
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        int[][] arr = init(rows,columns);
        int index = 0;
        for(int[] query : queries ){
            answer[index++] = rotation(query[0],query[1],query[2],query[3],arr);
            // print(rows,columns,arr);
        }
        return answer;
    }
}