-
[Python] ๋ฐฑ์ค 3184 ์ (BFS)๐ป Algorithm/Python 2022. 7. 2. 15:49
๐ ๋ฌธ์
๋ฏธํค์ ๋ท๋ง๋น์๋ ํน์ ์์ ์์ด ์๋ค. ๊ทธ๊ฐ ํน ์ ๋ ์ฌ์ด์ ๋ฐฐ๊ณ ํ ๋๋๋ ๋ง๋น์ ๋ค์ด์ ์์ ๊ณต๊ฒฉํ๋ค.
๋ง๋น์ ํ๊ณผ ์ด๋ก ์ด๋ฃจ์ด์ง ์ง์ฌ๊ฐํ ๋ชจ์์ด๋ค. ๊ธ์ '.' (์ )์ ๋น ํ๋๋ฅผ ์๋ฏธํ๋ฉฐ, ๊ธ์ '#'๋ ์ธํ๋ฆฌ๋ฅผ, 'o'๋ ์, 'v'๋ ๋๋๋ฅผ ์๋ฏธํ๋ค.
ํ ์นธ์์ ์ํ, ์์ง๋ง์ผ๋ก ์ด๋ํ๋ฉฐ ์ธํ๋ฆฌ๋ฅผ ์ง๋์ง ์๊ณ ๋ค๋ฅธ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋ค๋ฉด, ๋ ์นธ์ ๊ฐ์ ์์ญ ์์ ์ํด ์๋ค๊ณ ํ๋ค. ๋ง๋น์์ "ํ์ถ"ํ ์ ์๋ ์นธ์ ์ด๋ค ์์ญ์๋ ์ํ์ง ์๋๋ค๊ณ ๊ฐ์ฃผํ๋ค.
๋คํํ ์ฐ๋ฆฌ์ ์์ ๋๋์๊ฒ ์ธ์์ ๊ฑธ ์ ์๊ณ ์์ญ ์์ ์์ ์๊ฐ ๋๋์ ์๋ณด๋ค ๋ง๋ค๋ฉด ์ด๊ธฐ๊ณ , ๋๋๋ฅผ ์ฐ๋ฆฌ์์ ์ซ์๋ธ๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ๋๋๊ฐ ๊ทธ ์ง์ญ ์์ ๋ชจ๋ ์์ ๋จน๋๋ค.
๋งจ ์ฒ์ ๋ชจ๋ ์๊ณผ ๋๋๋ ๋ง๋น ์ ์์ญ์ ์กด์ฌํ๋ค.
์์นจ์ด ๋๋ฌํ์ ๋ ์ด์๋จ์ ์๊ณผ ๋๋์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์ ๋ ฅ
์ฒซ ์ค์๋ ๋ ์ ์ R๊ณผ C๊ฐ ์ฃผ์ด์ง๋ฉฐ(3 ≤ R, C ≤ 250), ๊ฐ ์๋ ๋ง๋น์ ํ๊ณผ ์ด์ ์๋ฅผ ์๋ฏธํ๋ค.
๋ค์ R๊ฐ์ ์ค์ C๊ฐ์ ๊ธ์๋ฅผ ๊ฐ์ง๋ค. ์ด๋ค์ ๋ง๋น์ ๊ตฌ์กฐ(์ธํ๋ฆฌ, ์, ๋๋์ ์์น)๋ฅผ ์๋ฏธํ๋ค.
์ถ๋ ฅ
ํ๋์ ์ค์ ์์นจ๊น์ง ์ด์์๋ ์๊ณผ ๋๋์ ์๋ฅผ ์๋ฏธํ๋ ๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
6 6
...#..
.##v#.
#v.#.#
#.o#.#
.###.#
...###์์ ์ถ๋ ฅ 1
0 2
์์ ์ ๋ ฅ 2
8 8
.######.
#..o...#
#.####.#
#.#v.#.#
#.#.o#o#
#o.##..#
#.v..v.#
.######.์์ ์ถ๋ ฅ 2
3 1
์์ ์ ๋ ฅ 3
9 12
.###.#####..
#.oo#...#v#.
#..o#.#.#.#.
#..##o#...#.
#.#v#o###.#.
#..#v#....#.
#...v#v####.
.####.#vv.o#
.......####.์์ ์ถ๋ ฅ 3
3 5
๐ ํ์ด
๐ฌ Code
import sys from collections import deque input = sys.stdin.readline def bfs(x, y): q = deque([(x, y)]) o = 0 v = 0 while q: x, y = q.popleft() for i in range(5): nx = x + dx[i] ny = y + dy[i] if 0 <= nx < n and 0 <= ny < m and not visited[nx][ny]: if graph[nx][ny] == '#': continue elif graph[nx][ny] == 'v': v += 1 elif graph[nx][ny] == 'o': o += 1 q.append((nx, ny)) visited[nx][ny] = 1 return o, v if __name__ == '__main__': n, m = map(int, input().split()) graph = [] visited = [[0 for _ in range(m)] for _ in range(n)] for _ in range(n): graph.append(list(input().rstrip())) dx = [0, -1, 1, 0, 0] dy = [0, 0, 0, -1, 1] sheep, wolf = 0, 0 for i in range(n): for j in range(m): if not visited[i][j] and graph[i][j] != '#': s, w = bfs(i, j) if s > w: sheep += s else: wolf += w print(sheep, wolf)
๐ก Solution
- graph: ๋ง๋น ์ํ
- visited: ํด๋น ์ขํ์ ๋ฐฉ๋ฌธํ๋์ง ์ฒดํฌํ๋ 2์ฐจ์ ๋ฐฐ์ด
for i in range(n): for j in range(m): if not visited[i][j] and graph[i][j] != '#': s, w = bfs(i, j) if s > w: sheep += s else: wolf += w
(0, 0)๋ถํฐ ์ขํ ์ฒดํฌ๋ฅผ ๋๋ฆฝ๋๋ค. ๋ง์ฝ (0, 0)์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๊ณ ์ด ์ขํ์ ๋์ฌ์๋ ๊ฒ์ด ์ธํ๋ฆฌ๊ฐ ์๋๋ผ๋ฉด bfs(0, 0)์ ์ํํฉ๋๋ค. bfs ํจ์์์๋ ํ ์์ญ์ ์ขํ๋ฅผ ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ฉด์ ์๊ณผ ๋๋์ ์๋ฅผ ๋ฆฌํดํฉ๋๋ค. 2์ค for๋ฌธ์์๋ ์ด ๋ฆฌํด๊ฐ์ ๋ฐ์์ ์๊ณผ ๋๋์ ์ธ์ ๊ฒฐ๊ณผ๋ฅผ ์กฐ๊ฑด๋ฌธ์ผ๋ก ์ฒดํฌํ๊ณ ์ด์๋จ์ ์๊ณผ ๋๋์ ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
+) ์ฒ์์๋ ๋ฐฉํฅ๋ฒกํฐ์ ์ํ์ข์ฐ๋ง ๋ฃ์์๋๋ฐ,
.#. #o# .#.
์ฒ๋ผ ์ธํ๋ฆฌ ์ฌ์ด์ ํ ๋ง๋ฆฌ๋ง ๋๋ฌ์ธ์ฌ ์๋ ๊ฒฝ์ฐ์๋ ํด๋น ์ขํ๋ฅผ ์ฒดํฌํ์ง ๋ชปํ๊ณ ์ด๋์ขํ๋ง ์ฒดํฌํด์ ๋์ด๊ฐ๊ธธ๋ ๋ฐฉํฅ๋ฒกํฐ์ ์ ์๋ฆฌ๋ ์ถ๊ฐํด์คฌ์ต๋๋ค.
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 15787 ๊ธฐ์ฐจ๊ฐ ์ด๋ ์ ํค์น๊ณ ์ํ์๋ฅผ (๊ตฌํ) (0) 2022.07.08 [Python] ๋ฐฑ์ค 11286 ์ ๋๊ฐ ํ (Heapq) (0) 2022.07.08 [Python] ๋ฐฑ์ค 2667 ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (BFS) (0) 2022.07.02 [Python] ๋ฐฑ์ค 2615 ์ค๋ชฉ (Brute Force) (0) 2022.07.02 [Python] ๋ฐฑ์ค 1913 ๋ฌํฝ์ด (๊ตฌํ) (0) 2022.07.02