-
[프로그래머스] 행렬 테두리 회전하기ALGORITHM/PROGRAMMERS 2021. 8. 6. 18:45
https://programmers.co.kr/learn/courses/30/lessons/77485
2021-08-06
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051import 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에 돌려야 하는 행렬 값들을 차례 대로 넣었다.
리스트에 값을 넣으면서 최솟값을 체크했고, 리스트에 모두 넣은 후 맨 마지막 값을 앞으로 보냈다.
마지막으로 리스트에 넣은 값들을 다시 차례대로 행렬에 넣었다.
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 쿼드압축 후 개수 세기 (월간 코드 챌린지 시즌1) (0) 2021.08.07 [프로그래머스] 단체사진 찍기 (2017 카카오코드 본선) (0) 2021.08.07 [프로그래머스] 괄호 회전하기 (월간 코드 챌린지 시즌2) (0) 2021.08.05 [프로그래머스] 전화번호 목록 (0) 2021.08.05 [프로그래머스] 방문 길이 (0) 2021.08.04