[BOJ] 21609 ์์ด ์คํ๊ต
๋ฌธ์
๋ฌธ์ ์ค๋ช
Baekjoon Online Judge - 21609๋ฒ ์์ด ์คํ๊ต
์์ด ์คํ๊ต์ ์ฝ๋ฉ ๋์๋ฆฌ์์ ๊ฒ์์ ๋ง๋ค์๋ค. ์ด ๊ฒ์์ ํฌ๊ธฐ๊ฐ NรN์ธ ๊ฒฉ์์์ ์งํ๋๊ณ , ์ด๊ธฐ์ ๊ฒฉ์์ ๋ชจ๋ ์นธ์๋ ๋ธ๋ก์ด ํ๋์ฉ ๋ค์ด์๊ณ , ๋ธ๋ก์ ๊ฒ์์ ๋ธ๋ก, ๋ฌด์ง๊ฐ ๋ธ๋ก, ์ผ๋ฐ ๋ธ๋ก์ด ์๋ค. ์ผ๋ฐ ๋ธ๋ก์ M๊ฐ์ง ์์์ด ์๊ณ , ์์ M์ดํ์ ์์ฐ์๋ก ํํํ๋ค. ๊ฒ์์ ๋ธ๋ก์ -1, ๋ฌด์ง๊ฐ ๋ธ๋ก์ 0์ผ๋ก ํํํ๋ค. (i, j)๋ ๊ฒฉ์์ i๋ฒ ํ, j๋ฒ ์ด์ ์๋ฏธํ๊ณ , |r1 - r2| + |c1 - c2| = 1์ ๋ง์กฑํ๋ ๋ ์นธ (r1, c1)๊ณผ (r2, c2)๋ฅผ ์ธ์ ํ ์นธ์ด๋ผ๊ณ ํ๋ค.
๋ธ๋ก ๊ทธ๋ฃน์ ์ฐ๊ฒฐ๋ ๋ธ๋ก์ ์งํฉ์ด๋ค. ๊ทธ๋ฃน์๋ ์ผ๋ฐ ๋ธ๋ก์ด ์ ์ด๋ ํ๋ ์์ด์ผ ํ๋ฉฐ, ์ผ๋ฐ ๋ธ๋ก์ ์์ ๋ชจ๋ ๊ฐ์์ผ ํ๋ค. ๊ฒ์์ ๋ธ๋ก์ ํฌํจ๋๋ฉด ์ ๋๊ณ , ๋ฌด์ง๊ฐ ๋ธ๋ก์ ์ผ๋ง๋ ๋ค์ด์๋ ์๊ด์๋ค. ๊ทธ๋ฃน์ ์ํ ๋ธ๋ก์ ๊ฐ์๋ 2๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ผ ํ๋ฉฐ, ์์์ ํ ๋ธ๋ก์์ ๊ทธ๋ฃน์ ์ํ ์ธ์ ํ ์นธ์ผ๋ก ์ด๋ํด์ ๊ทธ๋ฃน์ ์ํ ๋ค๋ฅธ ๋ชจ๋ ์นธ์ผ๋ก ์ด๋ํ ์ ์์ด์ผ ํ๋ค. ๋ธ๋ก ๊ทธ๋ฃน์ ๊ธฐ์ค ๋ธ๋ก์ ๋ฌด์ง๊ฐ ๋ธ๋ก์ด ์๋ ๋ธ๋ก ์ค์์ ํ์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ๋ธ๋ก, ๊ทธ๋ฌํ ๋ธ๋ก์ด ์ฌ๋ฌ๊ฐ๋ฉด ์ด์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ๋ธ๋ก์ด๋ค.
์ค๋์ ์ด ๊ฒ์์ ์คํ ํ๋ ์ด ๊ธฐ๋ฅ์ ๋ง๋๋ ค๊ณ ํ๋ค. ์คํ ํ๋ ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ด ๋ธ๋ก ๊ทธ๋ฃน์ด ์กด์ฌํ๋ ๋์ ๊ณ์ํด์ ๋ฐ๋ณต๋์ด์ผ ํ๋ค.
ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ํฐ ๋ธ๋ก ๊ทธ๋ฃน์ ์ฐพ๋๋ค. ๊ทธ๋ฌํ ๋ธ๋ก ๊ทธ๋ฃน์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ํฌํจ๋ ๋ฌด์ง๊ฐ ๋ธ๋ก์ ์๊ฐ ๊ฐ์ฅ ๋ง์ ๋ธ๋ก ๊ทธ๋ฃน, ๊ทธ๋ฌํ ๋ธ๋ก๋ ์ฌ๋ฌ๊ฐ๋ผ๋ฉด ๊ธฐ์ค ๋ธ๋ก์ ํ์ด ๊ฐ์ฅ ํฐ ๊ฒ์, ๊ทธ ๊ฒ๋ ์ฌ๋ฌ๊ฐ์ด๋ฉด ์ด์ด ๊ฐ์ฅ ํฐ ๊ฒ์ ์ฐพ๋๋ค. 1์์ ์ฐพ์ ๋ธ๋ก ๊ทธ๋ฃน์ ๋ชจ๋ ๋ธ๋ก์ ์ ๊ฑฐํ๋ค. ๋ธ๋ก ๊ทธ๋ฃน์ ํฌํจ๋ ๋ธ๋ก์ ์๋ฅผ B๋ผ๊ณ ํ์ ๋, B2์ ์ ํ๋ํ๋ค. ๊ฒฉ์์ ์ค๋ ฅ์ด ์์ฉํ๋ค. ๊ฒฉ์๊ฐ 90๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ค. ๋ค์ ๊ฒฉ์์ ์ค๋ ฅ์ด ์์ฉํ๋ค. ๊ฒฉ์์ ์ค๋ ฅ์ด ์์ฉํ๋ฉด ๊ฒ์์ ๋ธ๋ก์ ์ ์ธํ ๋ชจ๋ ๋ธ๋ก์ด ํ์ ๋ฒํธ๊ฐ ํฐ ์นธ์ผ๋ก ์ด๋ํ๋ค. ์ด๋์ ๋ค๋ฅธ ๋ธ๋ก์ด๋ ๊ฒฉ์์ ๊ฒฝ๊ณ๋ฅผ ๋ง๋๊ธฐ ์ ๊น์ง ๊ณ์ ๋๋ค.
์คํ ํ๋ ์ด๊ฐ ๋ชจ๋ ๋๋ฌ์ ๋ ํ๋ํ ์ ์์ ํฉ์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒฉ์ ํ ๋ณ์ ํฌ๊ธฐ N, ์์์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฒฉ์์ ์นธ์ ๋ค์ด์๋ ๋ธ๋ก์ ์ ๋ณด๊ฐ 1๋ฒ ํ๋ถํฐ N๋ฒ ํ๊น์ง ์์๋๋ก ์ฃผ์ด์ง๋ค. ๊ฐ ํ์ ๋ํ ์ ๋ณด๋ 1์ด๋ถํฐ N์ด๊น์ง ์์๋๋ก ์ฃผ์ด์ง๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์นธ์ ์ ๋ณด๋ -1, 0, M์ดํ์ ์์ฐ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํ๋ํ ์ ์์ ํฉ์ ์ถ๋ ฅํ๋ค.
์ ํ
- 1 โค N โค 20
- 1 โค M โค 5
ํ์ด
ํด์ค
1~5 ๋ก์ง ์์๋๋ก ๊ตฌํํ๋ค. ๋์ ๋ค์์ ์ฃผ์ํ๋ค.
1)
- N*N ๊ฐ์ ์ขํ๋ฅผ ๋ชจ๋ ํ์ธํ๋ฉด์ ์ผ๋ฐ ๋ธ๋ก์ด๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ dfs ํ์์ ํตํด ์ธ์ ํ ๋ธ๋ก ๊ทธ๋ฃน์ ํ์ํ๋ค.(0 ๋๋ ์๊ธฐ ์์ ์ธ ๋ธ๋ก)
- ์ด๋ ๋ฌด์ง๊ฐ ๋ธ๋ก(0)์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํด์ ํ์ฌ ๋ค๋ฅธ ๋ธ๋ก ๊ทธ๋ฃน์๋ ํฌํจ๋ ์ ์๋๋ก ํด์ผํ๋ค.
- 3)
- ์ค๋ ฅ ๊ตฌํ์ ๊ฐ ์ด๋ง๋ค ํ๋ฅผ ์์ฑํ์ฌ ๋น์นธ ์ขํ๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก enqueueํ๋๋ก ํ๋ค.
- ๋จ, ๊ฒ์ ๋ธ๋ก์ ๋ง๋๋ฉด ํ๋ฅผ ์ด๊ธฐํํด์ผํ๋ค.
2์ฐจ์ ๋ฐฐ์ด ์ขํ๋ 1์ฐจ์ ๋ฐฐ์ด ์ขํ๋ก ๋ณํํ์ฌ ๊ตฌํํ๋ค.
์ํ์ฐฉ์ค
- ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ํฐ ๋ธ๋ก ๊ทธ๋ฃน ๊ตฌํ๋ฉด์ ์ฐ์ ์์ ๊ตฌํ์ ์๋ชปํ์ฌ ํ ์ผ 2๋ฒ์ด ๊ณ์ ํ๋ ธ๋ค.
- ๋ฌด์ง๊ฐ ๋ธ๋ก ๋ฐฉ๋ฌธ ํด์ ๋ ๊ฒ์ํ ํ ์ผ๋ณด๊ณ ๋ค๋ฆ๊ฒ ์์์ฑ๋ค..
์ฝ๋
import java.io.*;
import java.util.*;
/**
* [1211] BOJ 21609 ์์ด ์คํ๊ต
* ๊ตฌํ, 2์ฐจ์ ๋ฐฐ์ด, ์์ ํ์, dfs
*/
public class BOJ_21609_์์ด์คํ๊ต {
static final int VACANT = -2; // ๋ธ๋ก ์ ๊ฑฐ ์ดํ ๋น ์นธ
static final int BLACK = -1; // ๊ฒ์ ๋ธ๋ก
static final int RAINBOW = 0; // ๋ฌด์ง๊ฐ ๋ธ๋ก
static final int BLOCK_GROUP_SIZE = 0; // maxBlockGroup ๋ฐฐ์ด์ 0๋ฒ ์ธ๋ฑ์ค(๊ทธ๋ฃน ๋ด ๋ธ๋ก ๊ฐ์)
static final int RAINBOW_SIZE = 1; // maxBlockGroup ๋ฐฐ์ด์ 1๋ฒ ์ธ๋ฑ์ค(๋ฌด์ง๊ฐ ๋ธ๋ก ๊ฐ์)
static int N, M, score, maxStandardBlock; // ์ต๋ ๋ธ๋ก ๊ทธ๋ฃน์ ๊ธฐ์ค ๋ธ๋ก ์ขํ
static int[] maxBlockGroup = new int[2]; // ๋ธ๋ก ๊ทธ๋ฃน ์ฐ์ ์์๋ฅผ ๋น๊ตํ๊ธฐ ์ํ ๋ฐฐ์ด(0: BLOCK_GROUP_SIZE, 1: RAINBOW_SIZE)
static int[][] map, rotatedMap;
static boolean[][] visited;
static Map<Integer, List<Integer>> blockGroupMap = new HashMap<>(); // ๊ฐ ๋ธ๋ก ๊ทธ๋ฃน์ ํฌํจ๋ ๋ธ๋ก ์ขํ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋งต(key: ๊ธฐ์ค ๋ธ๋ญ ์ขํ, value: ๋ธ๋ก ๊ทธ๋ฃน์ ํฌํจ๋ ๋ธ๋ก ์ขํ ๋ฆฌ์คํธ)
static int[] dx = {-1, 1, 0, 0};
static int[] dy = {0, 0, -1, 1};
static Queue<Integer> rainbowPoints = new ArrayDeque<Integer>(); // ๋ฌด์ง๊ฐ ๋ธ๋ก ๋ฐฉ๋ฌธ ํด์ ํ๊ธฐ ์ํด ๊ฐ dfs ํ์ ์ ๋ฐฉ๋ฌธํ ๋ฌด์ง๊ฐ ๋ธ๋ก ์ขํ ์ ์ฅ
static Queue<Integer> vacantPoints = new ArrayDeque<Integer>(); // ์ค๋ ฅ ์์ฉ์ ์ํด ์ด ๋ณ ๋น ์ขํ ์ ์ฅํ๋ ํ
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// ์
๋ ฅ
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
visited = new boolean[N][N];
map = new int[N][N];
rotatedMap = new int[N][N];
for (int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for (int j=0; j<N; j++) map[i][j] = Integer.parseInt(st.nextToken());
}
// ์คํ ํ๋ ์ด ์์
while(findBlockGroups()) { // ๋ธ๋ก ๊ทธ๋ฃน ์กด์ฌํ ๋๊น์ง ์คํ ํ๋ ์ด ๋ฐ๋ณต
removeAndGetScore(); // ๋ธ๋ก ๊ทธ๋ฃน ์กด์ฌํ๋ฉด ์ฐพ์ ๊ทธ๋ฃน์ ๋งต์์ ์ญ์ ํ๊ณ ์ ์ ํ๋
actGravity(); // ์ค๋ ฅ ์์ฉ
rotateMap(); // 90๋ ๋ฐ์๊ณ ํ์
actGravity(); // ์ค๋ ฅ ์์ฉ
}
// ์ถ๋ ฅ
System.out.println(score);
}
// ๋ธ๋ก ๊ทธ๋ฃน ์กด์ฌ ์ฌ๋ถ ํ์
private static boolean findBlockGroups() {
// ์ด๊ธฐํ
for (boolean[] v : visited) Arrays.fill(v, false); // ๋ฐฉ๋ฌธ ์ด๊ธฐํ
blockGroupMap.clear(); // ๊ฐ ๋ธ๋ก ๊ทธ๋ฃน ๋ณ ๋ธ๋ก๋ค ์ขํ ์ ์ฅํ๋ ๋งต ์ด๊ธฐํ
Arrays.fill(maxBlockGroup, 0); // ๋ธ๋ก ๊ทธ๋ฃน ๋ณ ํฌ๊ธฐ, ๋ฌด์ง๊ฐ ๋ธ๋ก ๊ฐ์ ๋ฐฐ์ด ์ด๊ธฐํ
maxStandardBlock = -1; // ๊ฐ์ฅ ํฐ ๋ธ๋ก ๊ทธ๋ฃน์ ๊ธฐ์ค ๋ธ๋ก ์ด๊ธฐํ
// N*N ๋ชจ๋ ๊ฐ๋ฅํ ์ขํ dfs ํ์
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
if (!visited[i][j] && map[i][j]>0) { // ๋ฐฉ๋ฌธ ์ํ๊ณ ์ผ๋ฐ ๋ธ๋ก์ธ ๊ฒฝ์ฐ๋ง ๊ธฐ์ค ์ขํ๋ก ์ผ์ dfs
rainbowPoints.clear(); // ๋ฌด์ง๊ฐ ๋ธ๋ก์ ๋ฐฉ๋ฌธ์ฌ๋ถ ์ด๊ธฐํํด์ผํ๋ฏ๋ก ํ์ ์ ์ฅํด์ผํจ. ์ด ํ๋ฅผ ์ด๊ธฐํ
int xy = i*N+j; // ๊ธฐ์ค ์ขํ
int[] curblockGroup = findMaxBlockGroup(xy, i, j, map[i][j], new int[2]); // dfs ํ์(๋ฐํ ๋ฐฐ์ด : ๊ธฐ์ค ์ขํ ๋ธ๋ก ๊ทธ๋ฃน์ ํฌํจ๋ ๋ธ๋ก ๊ฐ์, ๋ฌด์ง๊ฐ ๋ธ๋ก ๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด)
if (curblockGroup[BLOCK_GROUP_SIZE]<2) continue; // ๋ธ๋ก ๊ทธ๋ฃน์ ํฌํจ๋ ๋ธ๋ก ๊ฐ์๊ฐ 2๊ฐ ๋ฏธ๋ง์ด๋ฉด pass
// ์ฐ์ ์์ ๋น๊ต(ํ์ด ์ขํ๊ฐ์ด ์์ ๊ฒฝ์ฐ๋จผ์ ๋น๊ตํ๋ฏ๋ก ๋ง์ฝ ๊ฐ์ด ๊ฐ์ผ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๋์ค์ ๋น๊ตํ๋ ์ขํ๋ฅผ ๊ธฐ์ตํ๋๋ก ํจ
if ((maxBlockGroup[BLOCK_GROUP_SIZE] < curblockGroup[BLOCK_GROUP_SIZE]) ||
(maxBlockGroup[BLOCK_GROUP_SIZE] == curblockGroup[BLOCK_GROUP_SIZE] && maxBlockGroup[RAINBOW_SIZE] <= curblockGroup[RAINBOW_SIZE])) {
// ์ฐ์ ์์ ๋์ ๋ธ๋ก ๊ทธ๋ฃน์ผ๋ก ๊ฐฑ์
maxBlockGroup[BLOCK_GROUP_SIZE] = curblockGroup[BLOCK_GROUP_SIZE];
maxBlockGroup[RAINBOW_SIZE] = curblockGroup[RAINBOW_SIZE];
maxStandardBlock = xy;
}
clearRainbowVisit(); // ๋ฌด์ง๊ฐ ๋ธ๋ก ๋ฐฉ๋ฌธ์ฌ๋ถ ์ด๊ธฐํ
}
}
}
return (maxStandardBlock!=-1); // ๋ธ๋ก ๊ทธ๋ฃน์ด ์กด์ฌํ๋ฉด true ๋ฐํ
}
// ๊ธฐ์ค ์ขํ ๋ณ ๋ธ๋ก ๊ทธ๋ฃน ์ฐพ๊ธฐ(dfs)
private static int[] findMaxBlockGroup(int xy, int x, int y, int color, int[] size) {
visited[x][y] = true; // ๋ฐฉ๋ฌธ ์ ์ฅ
blockGroupMap.computeIfAbsent(xy, v -> new ArrayList<>()).add(x*N+y); // ํ์ฌ ๊ธฐ์ค ์ขํ์ ๋ธ๋ก ๊ทธ๋ฃน ๋ฆฌ์คํธ์ ์ถ๊ฐ
size[BLOCK_GROUP_SIZE]++; // ๋ธ๋ก ๊ทธ๋ฃน ํฌ๊ธฐ ์ฆ๊ฐ
// 4๋ฐฉ ์ธ์ ํ์
for (int i=0; i<4; i++) {
int nx = dx[i] + x;
int ny = dy[i] + y;
// ๊ฒฝ๊ณ ์์ด๊ณ , ๋ฐฉ๋ฌธ ์ํ๊ณ , ์๊ธฐ ์์ ๊ณผ ๊ฐ์ ์์ ํน์ ๋ฌด์ง๊ฐ ๋ธ๋ก์ด๋ฉด ๋ธ๋ก ๊ทธ๋ฃน์ ํฌํจ
if (isInside(nx, ny) && !visited[nx][ny] && (map[nx][ny]==color || map[nx][ny]==RAINBOW)) {
if (map[nx][ny]==RAINBOW) { // ์ด๋ ๋ฌด์ฌ๊ฐ ๋ธ๋ก์ด๋ฉด ๋ฌด์ง๊ฐ ๋ธ๋ก ๊ฐ์๋ฅผ ์ฆ๊ฐํ๊ณ ๋์ค์ ๋ฐฉ๋ฌธ ํด์ ํด์ฃผ๊ธฐ ์ํด ํ์๋ ์ ์ฅ
size[RAINBOW_SIZE]++;
rainbowPoints.offer(nx);
rainbowPoints.offer(ny);
}
findMaxBlockGroup(xy, nx, ny, color, size); // ์ฌ๊ท ํ์ ๋ณด๋(dfs)
}
}
return size; // ๋ธ๋ก ๊ทธ๋ฃน ๋ด ๋ธ๋ก ๊ฐ์, ๋ฌด์ง๊ฐ ๋ธ๋ก ๊ฐ์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ๋ฐํ
}
// ๋ฌด์ง๊ฐ ๋ธ๋ก ๋ฐฉ๋ฌธ ํด์
private static void clearRainbowVisit() {
while(!rainbowPoints.isEmpty()) {
int x = rainbowPoints.poll();
int y = rainbowPoints.poll();
visited[x][y] = false;
}
}
// ๋งต์์ ๋ธ๋ก ๊ทธ๋ฃน์ ์ ๊ฑฐํ๊ณ ์ ์ ํ๋
private static void removeAndGetScore() {
for (int block : blockGroupMap.get(maxStandardBlock)) map[block/N][block%N] = VACANT;
score += Math.pow(maxBlockGroup[BLOCK_GROUP_SIZE], 2);
}
// ์ค๋ ฅ ์์ฉ
private static void actGravity() {
for (int c=0; c<N; c++) {
vacantPoints.clear(); // ๊ฐ ์ด ๋ณ ๋น ์ขํ ์ ์ฅํ ํ๋ฅผ ์ด๊ธฐํ
for (int r=N-1; r>=0; r--) { // ์๋ ํ๋ถํฐ ์์ ํ์ผ๋ก ์ฌ๋ผ๊ฐ๋ฉฐ
int p = map[r][c];
if (p==VACANT) { // ๋น ์ขํ๋ฉด ํ์ ์ ์ฅ
vacantPoints.offer(r);
vacantPoints.offer(c);
} else if (p==BLACK) { // ๋จ, ๊ฒ์ ๋ธ๋ก์ ๋ง๋๋ฉด ํ๋ฅผ ์ด๊ธฐํ
vacantPoints.clear();
} else if (p>BLACK && !vacantPoints.isEmpty()) { // ๊ฒ์์์ด ์๋ ๋ธ๋ก์ ๋ง๋ฌ๊ณ ์๋์ ๋น ์ขํ๊ฐ ์์ผ๋ฉด
int x = vacantPoints.poll(); // ํ์์ ๋น ์ขํ ๊บผ๋ด์ ํด๋น ์ขํ์ ๋ธ๋ก ์ ์ฅํ๊ณ
int y = vacantPoints.poll();
map[x][y] = p;
map[r][c] = VACANT;
vacantPoints.offer(r); // ๋ธ๋ก์ด ์๋ ์๋ฆฌ๋ ๋ค์ ๋น์นธ์ผ๋ก ๋ง๋ค์ด ํ์ ์ ์ฅ
vacantPoints.offer(c);
}
}
}
}
// ๋งต์ 90๋ ๋ฐ์๊ณ ํ์
private static void rotateMap() {
for (int[] m : rotatedMap) Arrays.fill(m, 0);
// 90๋ ๋ฐ์๊ณ ํ์ ํ์ฌ ์์ ๋ฐฐ์ด์ ์ ์ฅํ๊ณ
for (int max=N-1, c=max; c>=0; c--) {
for (int r=0; r<N; r++) rotatedMap[max-c][r] = map[r][c];
}
// ์์ ๋ฐฐ์ด์ ์๋ณธ ๋ฐฐ์ด์ ๋ณต์ฌํ๋ค.
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) map[i][j] = rotatedMap[i][j];
}
}
// ๊ฒฝ๊ณ ์ฒดํฌ
public static boolean isInside(int nx, int ny) {
return (nx>=0 && nx<N && ny>=0 && ny<N);
}
}
๐ก
- ๊นก์๋ฎฌโฆ ์ด๋ ค์ฃผ์ธ์โฆ