Algorithm & Data Structures/Programers

Lv 2. 행렬 테두리 회전하기

Geisha 2024. 8. 22. 21:26

 

코드 흐름

  • 특별한 기술이 들어간 것은 아니고 시작부터 모듈화하여 set과 turn 메서드로 나누어 풀이하였다.
  • set 에서는 처음 만들어지는 배열을 세팅하고
  • turn 에서는 실제로 시계방향으로 배열을 돌려가며 최소값을 찾아낸다.

오류 

  • 이문제를 푸는데 있어 여러가지 오류가 발생했다. 
  • 시계방향으로 돌려야 하건만 반시계 방향으로 돌리고 있었으며
  • 문제를 제대로 읽지않고 행렬 테두리만 회전하면 되는것을 행렬자체를 돌려 버렸다.
  • 문제를 잘 읽도록 하자.
import java.util.*;

class Solution {
    int[][] map;
    int[] answer;
    public int[] solution(int rows, int columns, int[][] queries) {
        answer = new int[queries.length];
        map = new int[rows + 1][columns + 1];
        set(rows, columns);
        for (int i = 0; i < queries.length; i++) {
            answer[i] = turn(queries[i][0], queries[i][1], queries[i][2], queries[i][3]);
        }
        return answer;
    }
    public void set(int rows, int columns) {
        int num = 1;
        for (int i = 1; i <= rows; i++) {
            for (int j = 1; j <= columns; j++) {
                map[i][j] = num;
                num++;
            }
        }
    }
    public int turn(int startX, int startY, int endX, int endY) {
        int min = Integer.MAX_VALUE;
        int temp = map[startX][startY];
        for (int i = startX; i < endX; i++) {
            map[i][startY] = map[i + 1][startY];
            min = Math.min(min, map[i][startY]);
        }
        for (int i = startY; i < endY; i++) {
            map[endX][i] = map[endX][i + 1];
            min = Math.min(min, map[endX][i]);
        }
        for (int i = endX; i > startX; i--) {
            map[i][endY] = map[i - 1][endY];
            min = Math.min(min, map[i][endY]);
        }
        for (int i = endY; i > startY; i--) {
            map[startX][i] = map[startX][i - 1];
            min = Math.min(min, map[startX][i]);
        }
        map[startX][startY + 1] = temp;
        min = Math.min(min, temp);
        return min;
    }
}