ALGORITHM/PROGRAMMERS
[프로그래머스] 행렬 테두리 회전하기
0298
2021. 8. 6. 18:45
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
2021-08-06
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import java.util.*;
class Solution {
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
int index = 1;
int[][] arr = new int[rows][columns];
for(int i = 0; i < rows; i++){
for(int j = 0; j < columns; j++){
arr[i][j] = index++;
}
}
LinkedList<Integer> list = new LinkedList<>();
for(int p = 0; p < queries.length; p++) {
int x1 = queries[p][0] - 1;
int y1 = queries[p][1] - 1;
int x2 = queries[p][2] - 1;
int y2 = queries[p][3] - 1;
answer[p] = 987654321;
for(int i = y1; i <= y2; i++) {
list.add(arr[x1][i]);
answer[p] = Math.min(answer[p], arr[x1][i]);
}
for(int i = x1+1; i <= x2; i++) {
list.add(arr[i][y2]);
answer[p] = Math.min(answer[p], arr[i][y2]);
}
for(int i = y2-1; i >= y1; i--) {
list.add(arr[x2][i]);
answer[p] = Math.min(answer[p], arr[x2][i]);
}
for(int i = x2-1; i >= x1+1; i--) {
list.add(arr[i][y1]);
answer[p] = Math.min(answer[p], arr[i][y1]);
}
list.addFirst(list.removeLast());
int idx = 0;
for(int i = y1; i <= y2; i++) arr[x1][i] = list.get(idx++);
for(int i = x1+1; i <= x2; i++) arr[i][y2] = list.get(idx++);
for(int i = y2-1; i >= y1; i--) arr[x2][i] = list.get(idx++);
for(int i = x2-1; i >= x1+1; i--) arr[i][y1] = list.get(idx++);
list.clear();
}
return answer;
}
}
|
cs |
#문제풀이
행렬을 돌리는 구역을 4부분으로 나누고, LinkedList에 돌려야 하는 행렬 값들을 차례 대로 넣었다.
리스트에 값을 넣으면서 최솟값을 체크했고, 리스트에 모두 넣은 후 맨 마지막 값을 앞으로 보냈다.
마지막으로 리스트에 넣은 값들을 다시 차례대로 행렬에 넣었다.