알고리즘
프로그래머스 행렬 테두리 회전 (JAVA)
박카스마시며코딩
2021. 12. 25. 16:28
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
저는 사방 탐색의 방향을 회전 방향순으로 하여 코드를 작성하였습니다. 사방 탐색을 하면서 범위를 넘어가게 되면 다음 방향으로 진행하도록 하였습니다.
import java.util.*;
class Solution {
static int map[][];
static int dy[] = {0,1,0,-1};
static int dx[] = {1,0,-1,0};
static void init(int row, int col){
int num = 1;
map = new int[row][col];
for(int i = 0 ; i < row ; i++){
for(int j = 0 ; j < col ; j++){
map[i][j] = num++;
}
}
}
static int cal(int y1, int x1, int y2, int x2){
int ny = y1;
int nx = x1;
int prev = map[y1][x1];
int result = prev;
for(int i = 0 ; i < 4; i++){
ny += dy[i];
nx += dx[i];
while(ny >= y1 && ny <= y2 && nx >= x1 && nx <= x2){
int temp = map[ny][nx];
map[ny][nx] = prev;
prev = temp;
result = Math.min(result, prev);
ny += dy[i];
nx += dx[i];
}
ny -= dy[i];
nx -= dx[i];
}
// System.out.println("----------------------");
// print();
return result;
}
static void print(){
for(int i = 0 ; i < map.length ; i++){
for(int j = 0 ; j < map[0].length ; j++){
System.out.print(map[i][j]+" ");
}
System.out.println();
}
}
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
init(rows,columns);
int index = 0;
for(int[] query : queries){
answer[index++] = cal(query[0]-1, query[1]-1, query[2]-1, query[3]-1);
}
return answer;
}
}