https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PoOKKAPIDFAUq
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
1. ๋ฌธ์ ์์ฝ
NxNํฌ๊ธฐ map์ด ์ฃผ์ด์ง๋ค.
๋ฑ์ฐ๋ก๋ ๊ฐ์ฅ ๋์ ๋ด์ฐ๋ฆฌ์์ ์์๋๋ฉฐ, ์ฌ๋ฐฉํ์์ผ๋ก ๋์ด๊ฐ ์์ ์ขํ๋ก๋ง ์ด๋ํ ์ ์๋ค.
๋ฑ ํ ๊ณณ์ K๋์ด ์ดํ ๋งํผ ๊น๋ ๊ณต์ฌ๋ฅผ ํ ์ ์๋ค.
์ด ๋ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ๊ธด ๋ฑ์ฐ๋ก๋ฅผ ์ถ๋ ฅํ๋ค.
2. ํ์ด
dfs๋ก ํ์๋ค.
1. ์ต๋ ๋์ด๋ ์ ๋ ฅ๋ฐ์ ๋ ๊ฐฑ์ ํด์ฃผ์๋ค.
2. ๊ฐ์ฅ ๋์ ์์น๋ ํ์ ์ขํ ์ ์ฅํ๋ค.
3. ํด๋น ์ขํ๋ก ๊ฐ ์ ์๋ ๋ชจ๋ ๊ธธ์ ํ์ํ๋ค. => dfs
- ๋ฒ์ ์์ ๋ค ๊ฒฝ์ฐ,
- ๋ค์ ์์น์ ๋์ด๊ฐ ํ์ฌ ๋์ด๋ณด๋ค ์์ผ๋ฉด dfs ๋๋ฌ ๊ฐ๋ค
- ๋ค์ ์์น์ ๋์ด๊ฐ ํ์ฌ ๋์ด๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด,
๊ณต์ฌ๋ฅผ ํ์ง ์์๊ณ , ๋ ๋์ด์ ์ฐจ๊ฐ K๋ณด๋ค ์๋ค๋ฉด ๋์ด๋ฅผ ๊น์ ํ์ฌ๋์ด-1 ๋ก ๋ง๋ค๊ณ dfs๋ฅผ ๋๋ค.
* ๋ฐฉ๋ฌธํ ์ง์ ์ visited๋ฅผ true๋กํด์ฃผ๊ณ , dfs๊ฐ ๋๋๋ฉด ๋ค๋ฅธ ๊ฒฝ๋ก๋ก๋ ๊ฐ๋ด์ผํ๋ฏ๋ก visited๋ฅผ false๋ก ์๋ณต์ํจ๋ค.
๋ด๊ฐ ๋์น ๋ถ๋ถ์, ์์์ ์ visitedํด์ฃผ์ง ์์๋ค.
๊ฒฝ๋ก๋ฅผ ์ญ ํ์ํ๋ค๊ฐ ์์์ ์ ๋ง๋ฌ์ ๋, K๋งํผ ๊น์๋ณด๊ณ ๊น์ด๋ฉด dfs๋ฅผ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํด์ ๋ฌธ์ ๊ฐ ๋์๋ค.
์์์ง์ ๋ ์ ๋ค๋ก visited ์ฒดํฌ๋ฅผ ํด์ฃผ๋ ํต๊ณผํ์๋ค.
3. ์ฝ๋
package a22_11_08;
import java.io.*;
import java.util.*;
public class SW_1949_๋ฑ์ฐ๋ก์กฐ์ฑ {
static int N, K, ans, max;
static int[][] map;
static boolean[][] visited;
static Queue<Pos> starts;
static int[] dy= {-1,1,0,0};
static int[] dx= {0,0,-1,1};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc=1; tc<=T; tc++) {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
map = new int[N][N];
visited = new boolean[N][N];
starts = new ArrayDeque<> ();
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());
max = Math.max(max, map[i][j]);
}
} //์
๋ ฅ ๋
for (int i=0; i<N; i++) {
for (int j=0; j<N; j++) {
if (map[i][j] == max) {
starts.offer(new Pos(i, j));
}
}
} //์์์ ์
ํ
ans = 0;
solution();
System.out.println("#"+tc+" "+ans);
}
}
static void solution() {
while (!starts.isEmpty()) {
Pos start = starts.poll();
visited[start.y][start.x] = true;
dfs(start.y, start.x, 1, false, max);
visited[start.y][start.x] = false;
}
}
static void dfs(int y, int x, int dep, boolean used, int now) {
ans = Math.max(ans, dep);
for (int d=0; d<4; d++) {
int ny = y+dy[d];
int nx = x+dx[d];
if (ny<0||ny>=N||nx<0||nx>=N||visited[ny][nx]) continue;
if (map[ny][nx] < now) {
visited[ny][nx] = true;
dfs(ny, nx, dep+1, used, map[ny][nx]);
visited[ny][nx] = false;
} else {
if (used == false) {
if (map[ny][nx] - now < K) {
visited[ny][nx] = true;
dfs(ny, nx, dep+1, true, now-1);
visited[ny][nx] = false;
}
}
}
}
}
static class Pos {
int y, x;
Pos(int y, int x) {
this.y = y;
this.x = x;
}
}
}
'Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 1486. ์ฅํ์ด์ ๋์ ์ ๋ฐ - Java (0) | 2022.11.13 |
---|---|
[SWEA] 1868. ํํํํ ์ง๋ขฐ์ฐพ๊ธฐ - Java (0) | 2022.11.13 |
[SWEA] 1227. [S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 7์ผ์ฐจ - ๋ฏธ๋ก2 - Java (0) | 2022.10.27 |
[SWEA] 14510. ๋๋ฌด ๋์ด - Java (0) | 2022.10.26 |
[SWEA] 2115. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ฒ๊ฟ์ฑ์ทจ - Java (0) | 2022.10.24 |