1. ๋ฌธ์ ์ค๋ช
(1) ํ์ ์ํฌ ๋ถ๋ถ ํ๋ ฌ์ ์ข์๋จ, ์ฐํ๋จ์ List๊ฐ ์ฃผ์ด์ง๋ค.
(2) List์ ๊ฐ๋ง๋ค ํ๋ ฌ์ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํจ๋ค.
(3) ํ์ ํ ๋, ์์ง์๋ ๊ฐ ์ค ๊ฐ์ฅ ์์ ๊ฐ๋ค์ ๋ชจ์์ ๋ฐํํ๋ค.
2. ์ ๊ทผ ๋ฐฉ์
KEY WORD
: BRUTE FORCE
, ๋ฐฐ์ด ํ์
๋ฐฐ์ด ํ์ ์ ๋ธ๋ฃจํธ ํฌ์ค ๋ฌธ์ ๋ฅผ ํ ๋ ๋จ๊ณจ๋ก ๋์จ๋ค. ์ฝ๋ฉ ํ
์คํธ์์๋ ๋ฐฐ์ด ํ์
์ด๋ผ๋ ํค์๋๊ฐ ๋จ๋
์ผ๋ก ๋ฌธ์ ์ ๋์ค์ง ์์ง๋ง, ๋ฌธ์ ์ ์กฐ์ฐ์ผ๋ก๋ ์์ฃผ ๋ฑ์ฅํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ํ์ ํ๋ ๋ฒ์ ๋ํด ์์๋๋ ๊ฒ์ ์ค์ํ๋ค.
๋ฌธ์ ์์, ํ์ ํ๋ ๋ชจ์ต์ ์น์ ํ๊ฒ ์์๋ก ์๋ ค์ค๋ค.
14 -> 8์ ์๋ฆฌ๋ก, 8์ด 9์ ์๋ฆฌ๋ก ์๊ณ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๊ณ ์์์ ๋ณผ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ตฌํ์ ํ ๋๋ ์ด๋ป๊ฒ ํด์ผํ ๊น? ๊ตฌํํ ๋๋ ๋ฐ ์๊ณ ๋ฐฉํฅ
์ผ๋ก ์์ง์ฌ์ผ ํ๋ค. ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
map[2][2] = map[3][2];
map[3][2] = map[4][2];
// ...
์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ํ์ ์ด ๋์๊ฐ๋ ๋ฐฉํฅ๊ณผ ๋ฌ๋ฆฌ, ๋์
์ ์ญ ๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ์์์ 14 -> 8, 8 -> 9๊ฐ ๋๋ ค๋ฉด, 9์ ํ๋ ฌ์ 8๋์
-> 8์ ํ๋ ฌ์ 14 ๋์
์ผ๋ก ์ญ์์ผ๋ก ๊ฐ์ผํ๋ค.
๊ทผ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ์์ ์์ ๋๋ก ํ๋ฉด
9 ์๋ฆฌ๋ 8์ด ๋ค์ด์์ผ ํ์ง๋ง, ์ด๋ฏธ ์๋ 8์ ์๋ฆฌ๊ฐ 14๋ก ๋ฐ๋ ๋ค๋ผ์, 14๊ฐ ๋ ๋ฒ ์ฐ์ด๊ฒ ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ์์ ๋ฒ์ด๋๊ธฐ ์ํด, ์ต์ด ๊ฐ์ ๋์ ์ด ์ด๋ฃจ์ด์ง๋ 8 ๋ถ๋ถ์ ๋ฏธ๋ฆฌ ๋นผ๋์ด์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
3. ์ฝ๋ ํ์ด
import java.io.*;
import java.util.*;
class Solution {
public int[] solution(int rows, int columns, int[][] queries) {
int [][] map = new int [rows][columns];
int k = 1;
for(int i = 0; i < rows; i++){
for(int j = 0; j < columns; j++){
map[i][j] = k++;
}
}
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i < queries.length; i++){
list.add(rotation(queries[i][0]-1,queries[i][1]-1,queries[i][2]-1,queries[i][3]-1, map));
}
return list.stream().mapToInt(x->x).toArray();
}
public int rotation(int x1, int y1, int x2, int y2, int [][] map){
int [][] d = new int [][]{{1,0},{0,1},{-1,0},{0,-1}};
int temp = map[x1][y1];
int ans = temp;
map[x1][y1] = map[x1+1][y1];
int nowX = x1+1; int nowY = y1;
int i = 0;
while(nowX != x1 || nowY != y1) {
ans = Math.min(ans, map[nowX][nowY]);
if(nowX+d[i][0] > x2 || nowY+d[i][1] > y2 || nowX+d[i][0] < x1 || nowY+d[i][1] < y1){
i = (i+1)%4;
}
int nx = nowX + d[i][0];
int ny = nowY + d[i][1];
map[nowX][nowY] = map[nx][ny];
nowX = nx; nowY = ny;
}
map[nowX][nowY+1] = temp;
return ans;
}
}