알고리즘
프로그래머스 행렬 테두리 회전하기(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;
}
}