[PS] 99ํด๋ฝ ์ฝํ ์คํฐ๋ 32์ผ์ฐจ TIL (๋ฌด์ธ๋ ์ฌํ)
ํ๊ทธ: 99ํด๋ฝ, BFS/DFS, PS, TIL, ๊ทธ๋ํ, ์ฝ๋ฉํ ์คํธ์ค๋น, ํญํด99
์นดํ ๊ณ ๋ฆฌ: PS
![]()
๋ฌธ์

์ ์ถ๋ ฅ ์

์ค๋ช
์ง๋ ์ ๋ณด๊ฐ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๋๋ฐ, ๊ฐ ์์ญ์ ์ซ์๊ฐ ์ ํ์๊ฑฐ๋, โXโ ํ์๊ฐ ์๋ค. ํ์ํ๋ ์์ญ์ ์ซ์๋ฅผ ํฉ์น ๋ฐฐ์ด์ ๋ฐํํ๋ฉด ๋๋ค.
ํ์ด
๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ์ด ์ฃผ์ด์ง๋ฏ๋ก, ์ด๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ๊ทธ๋ํ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ ์ธํ๋ค. ๊ทธ ํ ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๋ถํฐ ์ํ์ข์ฐ ๋ชจ๋ ๋ฐฉ๋ฉด์ผ๋ก ํ์ํด๊ฐ๋ฉด์ ๊ทธ ์ ์ ์ ์ ํ ์๋ฅผ ํฉ์น ๋ฐฐ์ด์ ๋ฐํํด์ผ ํ๋ค.
๊ทธ๋ํ์์ ๊ฐ ์ ์ ์ ์ ํ ์๋ graph[x][y] ๋ก ์ ์ ์๋ค.
dfs ์์ ์ ์ ๋ถํฐ ํ์ํ ๋๋ง๋ค ์ด ๊ฐ์ ๋์ ํ ๊ฐ์ ๋ฐํํ๊ณ , list ์ ์ ์ฅํ๋ค.
์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค.
์ ์ฒด ์ฝ๋ ์ค ์ ์ผ ํต์ฌ์ ์ธ ์ฝ๋๋ size += dfs(nx, ny) ์ด ์ฝ๋๋ผ๊ณ ํ ์ ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class Solution {
static String[][] graph;
static boolean[][] visited;
static int n;
static int[] dx = {-1, 1, 0, 0};
static int[] dy = {0, 0, -1, 1};
static ArrayList<Integer> answer = new ArrayList<>();
public int[] solution(String[] maps) {
n = maps.length;
graph = new String[n][];
visited = new boolean[n][];
for (int i = 0; i < n; i++) {
graph[i] = new String[maps[i].length()];
visited[i] = new boolean[maps[i].length()];
char[] charArray = maps[i].toCharArray();
for (int j = 0; j < charArray.length; j++) {
graph[i][j] = String.valueOf(charArray[j]);
}
}
for (int x = 0; x < n; x++) {
for (int y = 0; y < graph[x].length; y++) {
if (!visited[x][y] && !graph[x][y].equals("X")) {
answer.add(dfs(x, y));
}
}
}
if (answer.isEmpty()) {
return new int[] {-1};
}
return answer.stream().mapToInt(Integer::intValue).sorted().toArray();
}
private static int dfs(int x, int y) {
visited[x][y] = true;
int size = Integer.parseInt(graph[x][y]);
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (isInRange(nx, ny) && !visited[nx][ny] && !graph[nx][ny].equals("X")) {
size += dfs(nx, ny);
}
}
return size;
}
private static boolean isInRange(int x, int y) {
return x >= 0 && x < n && y >= 0 && y < graph[x].length;
}
}
๋๊ธ๋จ๊ธฐ๊ธฐ