From 3d8d4b77da80ef75b9936f4cf7869fcdc4960597 Mon Sep 17 00:00:00 2001 From: rl544 <111494264+rl544@users.noreply.github.com> Date: Mon, 30 Jan 2023 20:47:59 +0900 Subject: [PATCH] =?UTF-8?q?uploaded=20at=202023.=201.=2030.=20=EC=98=A4?= =?UTF-8?q?=ED=9B=84=208:47:59?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../행렬 테두리 회전하기/solution.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 programmers/행렬 테두리 회전하기/solution.java diff --git a/programmers/행렬 테두리 회전하기/solution.java b/programmers/행렬 테두리 회전하기/solution.java new file mode 100644 index 0000000..6eaa4b7 --- /dev/null +++ b/programmers/행렬 테두리 회전하기/solution.java @@ -0,0 +1,35 @@ +// [문제 링크]: https://school.programmers.co.kr/learn/courses/30/lessons/77485 + +import java.util.*; +class Solution { + public int[] solution(int rows, int columns, int[][] queries) { + int numb = 1, idx = 0; + int[] answer = new int[queries.length]; + int[][] mA = new int[rows][columns]; + for(int a = 0; a < rows; a++){ + for(int b = 0; b < columns; b++, numb++){ + mA[a][b] = numb; + } + }//clone()은 1차원 배열에서만 deep copy.. 그러니 여기선 옅은 카피가 된다.. + for(int[] query : queries){ + int[][] temp = new int[rows][columns]; + for(int a = 0; a < rows; a++) temp[a] = mA[a].clone(); + int x1 = query[0]-1, y1 = query[1]-1, x2 = query[2]-1, y2 = query[3]-1, tg = (x2-x1+y2-y1)*2, min = numb; //numb는 위의 for문에 의해 최대값임. + //문제가 일반적 인식과 다르게 x를 행, y를 열로 했음 주의...(일반적 인식으론 x가 열, y가 행이지) + ArrayList al = new ArrayList<>(); + for(int y = y1; y <= y2; y++) al.add(new int[] {x1,y}); + for(int x = x1+1; x < x2; x++) al.add(new int[] {x,y2}); + for(int y = y2; y >= y1; y--) al.add(new int[] {x2,y}); + for(int x = x2-1; x > x1; x--) al.add(new int[] {x,y1}); + for(int t = 0; t < tg; t++){ + int[] tp = al.get(t), tp2 = al.get((t+tg-1)%tg); + int target = mA[tp2[0]][tp2[1]]; + temp[tp[0]][tp[1]] = target; + if(target < min) min = target; + } + mA = temp; + answer[idx++] = min; + } + return answer; + } +} \ No newline at end of file