잡다한 배똥월드

728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 행렬 테두리 회전하기

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 {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        int[][] table = new int[rows][columns];
        
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                table[i][j] = (i * columns) + (j + 1); 
            }
        }
        
        for (int i = 0; i < queries.length; i++) {
            PriorityQueue<Integer> q = new PriorityQueue<>();
            
            int x1 = queries[i][0] - 1;
            int y1 = queries[i][1] - 1;
            int x2 = queries[i][2] - 1;
            int y2 = queries[i][3] - 1;
            
            int fPoint = table[x1][y1];
            
            for (int j = y1+1; j <= y2; j++) {               
                q.add(fPoint);
                int temp = table[x1][j];
                table[x1][j] = fPoint;
                fPoint = temp;
            }
            
            for (int j = x1+1; j <= x2; j++) {               
                q.add(fPoint);
                int temp = table[j][y2];
                table[j][y2] = fPoint;
                fPoint = temp;
            }
            
            for (int j = y2-1; j >= y1; j--) {               
                q.add(fPoint);
                int temp = table[x2][j];
                table[x2][j] = fPoint;
                fPoint = temp;
            }
            
            for (int j = x2-1; j >= x1; j--) {               
                q.add(fPoint);
                int temp = table[j][y1];
                table[j][y1] = fPoint;
                fPoint = temp;
            }
            
            answer[i] = q.poll();
        }
        return answer;
    }
}

 

테스트 1 통과 (0.36ms, 81.2MB)
테스트 2 통과 (0.36ms, 77.2MB)
테스트 3 통과 (51.86ms, 108MB)
테스트 4 통과 (39.44ms, 125MB)
테스트 5 통과 (42.90ms, 107MB)
테스트 6 통과 (66.05ms, 121MB)
테스트 7 통과 (53.02ms, 102MB)
테스트 8 통과 (34.97ms, 113MB)
테스트 9 통과 (44.36ms, 99.6MB)
테스트 10 통과 (41.18ms, 118MB)
테스트 11 통과 (36.46ms, 102MB)

 

 

 

 

 

우선순위 큐에다가 움직이는 숫자들 넣고 제일 위에 숫자 꺼내면 정렬이나 따로 비교하지 않아도 가장 작은 숫자를 가져올 수 있음

시계방향으로 움직이기 때문에 위쪽 오른쪽 아래쪽 왼쪽으로 이동하는데 이것은 for문으로 처리함.

문제 그대로를 코드로 옮기는 문제라서 어렵진 않았고, 우선순위 큐에 대해서 조금 더 공부하게 됨.

 

 

 

 

우선 순위 큐 참고 링크

 

[Java] Priority Queue(우선 순위 큐)

PriorityQueue란 우선순위 큐로써 일반적인 큐의 구조 FIFO(First In First Out)를 가지면서, 데이터가 들어온 순서대로 데이터가 나가는 것이 아닌 우선순위를 먼저 결정하고 그 우선순위가 높은 데이터

velog.io

 

 

 

 

 

 

728x90

+ Recent posts