๐SWEA_SW_2105
๐ [SW_2105] ๋์ ํธ ์นดํ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Solution {
static int N;
static int[][] map;
static int dx[] = { 1, -1, -1, 1 };
static int dy[] = { 1, 1, -1, -1 };
static boolean[][] v;
static boolean[] dessert;
static int max;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int tc = Integer.parseInt(br.readLine());
for (int T = 1; T <= tc; T++) {
sb.append("#").append(T).append(" ");
// ํ ๋ณ์ ๊ธธ์ด
N = Integer.parseInt(br.readLine());
map = new int[N][N];
max = 0;
// ๋์ ํธ ์ข
๋ฅ ์
๋ ฅ
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());
}
}
// ์์๊ณผ ๋ฐ์ 2์นธ์ด ์์ด์ผ ์ฌ๊ฐํ์ด ๊ฐ๋ฅ ์์น
for (int i = 0; i < N - 2; i++) {
for (int j = 1; j < N - 1; j++) {
v = new boolean[N][N];
// ๋์ ํธ ์ข
๋ฅ
dessert = new boolean[101];
// ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
v[i][j] = true;
// ๋์ ํธ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
dessert[map[i][j]] = true;
dfs(1, i, j, i, j, 0);
}
}
if (max == 0) {
sb.append("-1").append("\n");
} else {
sb.append(max).append("\n");
}
}
System.out.println(sb);
}
// dfs - prevD๋ ์ด์ ๋ฐฉํฅ
static void dfs(int cnt, int y, int x, int initY, int initX, int prevD) {
for (int i = prevD; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
// ๋ฒ์์ ๋ฒ์ด๋์ง ์์ผ๋ฉด
if (ny >= 0 && ny < N && nx >= 0 && nx < N) {
// ์ด๊ธฐ ์ํ๋ก ๋์์์ ๋ ์ข
๋ฃ ( ๊ธฐ์ ์กฐ๊ฑด )
if ((ny == initY) && (nx == initX) && cnt > 2) {
max = Math.max(max, cnt);
return;
// ์ข
๋ฃ
}
// ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๋ฉด
if(!v[ny][nx] && !dessert[map[ny][nx]]) {
// ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
v[ny][nx] = true;
dessert[map[ny][nx]] = true;
dfs(cnt + 1, ny,nx,initY,initX,i);
// ๋ฐฑํธ๋ํน
v[ny][nx] = false;
dessert[map[ny][nx]] = false;
}
}
}
}
}
๐ค ๋์ ์๊ฐ
์ฒ์์ ์ด ๋ฌธ์ ์ ๋ํ ์ ๊ทผ์ ์๋ชปํ๋ค..
์คํฐ๋์์ ํผ ๊ฒ์ธ๋ฐ ์ ์ฌ๊ฐํ ํ์๊ณผ ์ง์ฌ๊ฐํ ํ์์ ๋๋ ์ ์๊ฐํ๋ฉฐ ๋จธ๋ฆฌ๋ฅผ ํฝ๊ธ๋๋ฆฌ๋ฉฐ ์๊ฐํ์ง๋ง ๋ชปํ์ด์..
์คํฐ๋์๋ค์ ์ค๋ช
์ ๋ค์๋ dfs๋ฅผ ๋ฃ์๋ง์ ์..! ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค..
๊ทธ๋์ ์ฌ๊ฐํ์ ๋ฒ์ด๋๋ ๋ฒ์๋ฅผ ์ ์ธํ๊ณ ์์ ํ์์ผ๋ก ๋ชจ๋ ์ ์์์ ์ถ๋ฐ๋ก ํ์ฌ ์ฌ๊ฐํ์ ๋ง๋ค์๋ค.
dfs ๋งค๊ฐ๋ณ์๋ก ์์ง์ธ ํ์, ์ขํ, ์ด๊ธฐ์ขํ, ์ด์ ๋ฐฉํฅ ์ ์ฒดํฌํด์ ์ด๊ธฐ์ขํ๋ก ์์ ๋ ๋์ ๋ด๊ณ ๋ฐฉํฅ์ ์ ์ ๋ฐฉํฅ์ ๊ฐ์ง ๋ชปํ๊ฒ for๋ฌธ์ ๊ตฌ์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ dfs๋ฅผ ํตํด ์ต๋ ๋์ ํธ ์ข
๋ฅ๋ฅผ ๊ตฌํด ์ถ๋ ฅํด ์ฃผ์๋ค.
๋ญ๊ฐ ์ค๋๋ง์ ํ๋ค๋ณด๋ ์ฌ๋ฌ ์๊ฐ์ ๋ชปํ ๊ฒ๊ฐ๋ค.. ํ๋ฆฐ ๊ฒ ๊ฐ์ผ๋ฉด ๋น ๋ฅด๊ฒ ๋ค์ํ ์๊ฐ์ ํ์ !!