Publish:

ํƒœ๊ทธ: , , , , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

img_3.png

๋ฌธ์ œ

๋ฌธ์ œ ๋งํฌ

img_3.png

์ž…์ถœ๋ ฅ ์˜ˆ

img_4.png

์„ค๋ช…

์ง€๋„ ์ •๋ณด๊ฐ€ ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ, ๊ฐ ์˜์—ญ์—” ์ˆซ์ž๊ฐ€ ์ ํ˜€์žˆ๊ฑฐ๋‚˜, โ€œ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;
  }
}
๋ฐฉ๋ฌธํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋Œ“๊ธ€,์ง€์ ,ํ”ผ๋“œ๋ฐฑ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜Š

๐Ÿ˜€

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ