Algorithm/programmers

[2021 데브매칭]행렬 테두리 회전하기

마닐라 2022. 2. 24. 15:56

📍 문제 설명

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

 

💡 접근

문제 설명대로 테두리만 회전시키고 회전한 원소 중 최솟값을 기록하면 되는 문제

원소 교체하고 board = clone 처리를 했으나 값만 바뀌는게 아닌 주솟값도 영향을 끼치는거 같아서 그냥 2중 for문 다시돌아서 다시 회전한 원소들을 배열에 넣어주었음

 

 

👩‍💻 코드

import java.util.*;

class Solution {
    static int[] dx = {-1,1,0,0};
    static int[] dy = {0,0,-1,1};
    static char[] c = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
    static HashMap<Character, Integer> map;
    static boolean[] visited;
    static int[][] clone;
    static int answer;

    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];

        Arrays.fill(answer, Integer.MAX_VALUE);

        int num = 1;
        int[][] board = new int[rows+1][columns+1];
        clone = new int[rows+1][columns+1];
        for(int i = 1; i <= rows; i++) {
            for(int j = 1; j <= columns; j++) {
                board[i][j] = num;
                clone[i][j] = num;
                num++;
            }
        }

        for(int i = 0; i < queries.length; i++) {
            int startX = queries[i][0];
            int startY = queries[i][1];
            int endX = queries[i][2];
            int endY = queries[i][3];

            //오른쪽
            for(int j = startY; j < endY; j++) {
                clone[startX][j+1] = board[startX][j];
                answer[i] = Math.min(answer[i], clone[startX][j+1]);
            }

            //아래
            for(int j = startX; j < endX; j++) {
                clone[j+1][endY] = board[j][endY];
                answer[i] = Math.min(answer[i], clone[j+1][endY]);
            }

            //왼쪽
            for(int j = endY; j > startY; j--) {
                clone[endX][j-1] = board[endX][j];
                answer[i] = Math.min(answer[i], clone[endX][j-1]);
            }

            //위
            for(int j = endX; j > startX; j--) {
                clone[j-1][startY] = board[j][startY];
                answer[i] = Math.min(answer[i], clone[j-1][startY]);
            }

            for(int j = 1; j <= rows; j++) {
                for(int k = 1; k <= columns; k++) {
                    board[j][k] = clone[j][k];
                }
            }
        }
        System.out.println(Arrays.deepToString(board));
        System.out.println(Arrays.toString(answer));

        return answer;
    }



    public static void main(String[] args) {
        Solution s = new Solution();

        int rows = 6;
        int columns = 6;
        int[][] queries = {{2,2,5,4}, {3,3,6,6}, {5,1,6,3}};

        s.solution(rows, columns, queries);
    }
}

'Algorithm > programmers' 카테고리의 다른 글

[2018 카카오 블라인드 1차]뉴스 클러스터링  (0) 2022.03.28
[2021 카카오 블라인드]메뉴 리뉴얼  (0) 2022.03.28
타겟넘버  (0) 2022.02.24
더 맵게  (0) 2022.02.24
기능개발  (0) 2022.02.24