본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 행렬 테두리 회전하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정해진 범위(queries 배열)의 테두리를 시계방향으로 회전시키며, 그중 가장 작은 값을 찾는 문제

처음에 전체 1~정해진 크기 만큼의 배열을 만들어 줄다음

맨 처음 시작점인 좌상단 그 아래 (plate[s1 + 1][s2])를 첫 tmp로 하여 회전 방향에 따라 수들을 교체하였다

그리고 그중 가장 작은 값을 찾아 회전 종료 시에 answer에 추가되도록 하였다

import java.util.Arrays;
class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        int[][] plate = new int[rows][columns];
        int n = 1;
        int index = 0;

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                plate[i][j] = n;
                n++;
            }
        }

        for (int[] query : queries) {
            int s1 = query[0] - 1;
            int s2 = query[1] - 1;
            int e1 = query[2] - 1;
            int e2 = query[3] - 1;

            int tmp = plate[s1 + 1][s2];
            int min = tmp;
            int tmp2 = 0;

            for (int j = s2; j <= e2; j++) {
                tmp2 = plate[s1][j];
                plate[s1][j] = tmp;
                tmp = tmp2;
                min = Math.min(min, tmp);
            }
            for (int j = s1 + 1; j <= e1; j++) {
                tmp2 = plate[j][e2];
                plate[j][e2] = tmp;
                tmp = tmp2;
                min = Math.min(min, tmp);
            }
            for (int j = e2 - 1; j >= s2; j--) {
                tmp2 = plate[e1][j];
                plate[e1][j] = tmp;
                tmp = tmp2;
                min = Math.min(min, tmp);
            }
            for (int j = e1 - 1; j >= s1; j--) {
                tmp2 = plate[j][s2];
                plate[j][s2] = tmp;
                tmp = tmp2;
                min = Math.min(min, tmp);
            }
            answer[index] = min;
            index++;
        }
        return answer;
    }
}