[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;
}
}
λκΈλ¨κΈ°κΈ°