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
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 - 괄호 변환 (2단계) (0) | 2022.04.28 |
---|---|
[Java] 프로그래머스 - 메뉴 리뉴얼 (2단계) (0) | 2022.04.27 |
[Java] 프로그래머스 - 짝지어 제거하기 (2단계) (0) | 2022.04.26 |
[Java] 프로그래머스 - 폰켓몬 (1단계) (0) | 2022.04.26 |
[Java] 프로그래머스 - 가장 먼 노드 (3단계) (0) | 2022.04.25 |