2021 Dev-Matching: 웹 백엔드 개발자 - 행렬 테두리 회전하기

Updated:

Java

2021 Dev-Matching: 웹 백엔드 개발자 - 행렬 테두리 회전하기

문제

접근 방법

  1. queries의 크기만큼 행렬 테두리를 회전시킨다.
  2. 회전하는 도중 만나는 숫자들 중에서, 가장 작은 수를 결과를 담는 배열에 저장한다.

코드

import java.util.*;

class Solution {
	static int[][] map;
	static int n,m;
	public static int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];

        n = rows;
        m = columns;

        map = new int[n][m];
        int idx = 1;
        for(int i = 0; i < n; i++) {
        	for(int j = 0; j < m; j++) {
        		map[i][j] = idx++;
        	}
        }

        int difY, difX, min = Integer.MAX_VALUE, y, x, temp, ny,nx;
        // 하, 우, 상, 좌
        int[] dirY = {1,0,-1,0};
        int[] dirX = {0,1,0,-1};
        int[] mCnt;
        int rIdx = 0;
        for(int[] move : queries) {
        	difY = move[2] - move[0];
        	difX = move[3] - move[1];

        	idx = 0;

        	y = move[0] - 1; 	// 시작 y
        	x = move[1] - 1;	// 시작 x
        	temp = map[y][x];
        	min = temp;
        	mCnt = new int[] {difY, difX, difY, difX};	// 회전을 할 횟수들
        	// 시계방향 ( 우, 하, 좌 , 상)으로 이동해야한다.
        	// 따라서, 차례로 대입하기 위해, 하, 우, 상, 좌 방향으로 이동하여 대입한다.
        	for(int cnt : mCnt) {
        		// cnt만큼 이동한다.
        		for(int i = 0; i < cnt; i++) {
        			ny = y + dirY[idx];
        			nx = x + dirX[idx];

        			map[y][x] = map[ny][nx];
        			y = ny;
        			x = nx;

        			min = Math.min(min, map[y][x]);
        		}
        		idx++; // 방향 전환
    		}
        	map[y][x + 1] = temp;
        	answer[rIdx] = min;
        	rIdx++;
        }
        Arrays.sort(answer);

        return answer;
    }

    public static void main(String[] args) {
      
    	int[][] queries = new int[][] {{2,2,5,4},{3,3,6,6},{5,1,6,3}};
      
    	System.out.println(Arrays.toString(solution(6,6, queries)));
	}
}

총평

후기

개선할 점