Algorithm/DFS&BFS

10026๋ฒˆ/ BFS ์ ๋ก์ƒ‰์•ฝ/ ํŒŒ์ด์ฌ

์ •ํ˜ธ๋‚˜ 2024. 9. 13. 22:28

๐Ÿ“• ๋ฌธ์ œ

https://www.acmicpc.net/problem/10026

 

๐Ÿ“—์‹คํ–‰๊ฒฐ๊ณผ

 

 

๐Ÿ“„ ํ’€์ด

1. ์ ๋ก์ƒ‰๋งน ์•„๋‹ ๋•Œ ) DFS๋กœ ์˜์—ญ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ 

2. G-> R๋กœ ๋ฐ”๊พธ๊ธฐ

3. ์ ๋ก์ƒ๋งน์ผ ๋•Œ) DFS๋กœ ์˜์—ญ ๊ฐœ์ˆ˜ ์ˆ˜ํ•˜๊ธฐ

 

 

๐Ÿ’ป ๋‹ต์•ˆ

  import sys
sys.setrecursionlimit(10**6)

# from collections import deque


n = int(sys.stdin.readline())
# list ๋ฉ”์„œ๋“œ๋กœ ๋ฌธ์ž์—ด ํ•˜๋‚˜์”ฉ ์ž˜๋ผ์คŒ, rstrip์œผ๋กœ \n์ œ๊ฑฐ
grid = [list(sys.stdin.readline().rstrip()) for _ in range(n)]
# ๋ฐฉ๋ฌธํ‘œ์‹œํ•  ๋ฐฐ์—ด false๋กœ ์ดˆ๊ธฐํ™”
visited = [[False]* n for _ in range(n)]

# ์ƒํ•˜์ขŒ์šฐ ์š”์†Œ ํƒ์ƒ‰
d = [(0,1),(0,-1),(1,0),(-1,0)]

def dfs(x,y):
     visited[y][x] = True
     color = grid[y][x]
     for dx, dy in d:
          X, Y = x + dx, y +dy
          if(0 <= X < n) and (0 <= Y < n):
               if visited[Y][X] == False and grid[Y][X] == color:
                    dfs(X,Y)

#์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ๊ฒฝ์šฐ
cnt, cnt2 = 0,0

for y in range(n):
    for x in range(n):
         if visited[y][x] == False:
              dfs(x,y)
              cnt += 1

# ๊ทธ๋ฆฌ๋“œ์˜ ์ดˆ๋ก=>๋นจ๊ฐ• ์ˆ˜์ •, ๋ฐฉ๋ฌธ ๋ฆฌ์ŠคํŠธ ์žฌ์‚ฌ์šฉ์œ„ํ•ด ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ
for  y in range(n) :
     for x in range(n):
          if grid[y][x] == 'G':
            grid[y][x] = 'R'

visited = [[False] * n for _ in range(n)]

#์ ๋ก์ƒ‰๋งน์ธ ๊ฒฝ์šฐ
for y in range(n):
     for x in range(n):
          if visited[y][x] == False:
               dfs(x,y)
               cnt2 += 1
print(cnt, cnt2)

 

โ˜บ๏ธ BFS ๋ฌธ์ œ ์ž์ฃผ ์‹ค์ˆ˜ํ•˜๋Š” ์ 

1. ์‹œ์ž‘์ ์— ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ํ‘œ์‹œ๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.

=> ์‹œ์ž‘์ ์„ ๋‘๋ฒˆ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์Œ

 

2. ํ์— ๋„ฃ์„ ๋•Œ. ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ํ‘œ์‹œ๋ฅผ ํ•˜๋Š” ๋Œ€์‹  ํ์—์„œ ๋นผ๋‚ผ ๋•Œ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ํ‘œ์‹œ๋ฅผ ๋‚จ๊น€

=> ๊ฐ™์€ ์นธ์ด ํ์— ์—ฌ๋Ÿฌ ๋ฒˆ๋“ค์–ด๊ฐ€์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ or ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ๋ฐœ์ƒ

 

3. ์ด์›ƒํ•œ ์›์†Œ๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๋Š”์ง€์— ๋Œ€ํ•œ ์ฒดํฌ ์ž˜๋ชปํ•จ

 

โ˜บ๏ธ DFS ๋ฌธ์ œ ํ’€ ๋•Œ ์ฐธ๊ณ 

1. ์‹œ์ž‘ํ•˜๋Š” ์นธ์— ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ํ‘œ์‹œ ๋‚จ๊ธฐ๊ธฐ

2. ์Šคํƒ์—์„œ ์›์†Œ ๊บผ๋‚ด์„œ ๊ทธ ์นธ๊ณผ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ์นธ์— ๋Œ€ํ•ด 3๋ฒˆ ์ง„ํ–‰ํ•˜๊ธฐ

3. ํ•ด๋‹น ์นธ์„ ์ด์ „์— ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ , ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ ๋‚จ๊ธฐ๊ณ  ํ•ด๋‹น ์นธ์„ ์Šคํƒ์— ์‚ฝ์ž…

4. ์Šคํƒ ๋นŒ ๋•Œ๊นŒ์ง€ 2๋ฒˆ ๋ฐ˜๋ณต

๋ชจ๋“  ์นธ์ด ์Šคํƒ์— 1๋ฒˆ์”ฉ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์นธ์ด n๊ฐœ์ผ ๋•Œ O(n)

 

๐Ÿ˜‰ ์ฐธ๊ณ 

 

https://chaewonkong.github.io/posts/python-deque.html

 

Python - ๋ฐํฌ(deque) ์–ธ์ œ, ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

Python์˜ ๋ฐํฌ(deque)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ์–ธ์ œ, ์™œ ์จ์•ผ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณธ๋‹ค

chaewonkong.github.io

 

https://www.youtube.com/watch?v=93jy2yUYfVE&list=PLtqbFd2VIQv4O6D6l9HcD732hdrnYb6CY&index=11

 

https://develop247.tistory.com/248

 

[ํŒŒ์ด์ฌ/Python] ๋ฐฑ์ค€ 10026๋ฒˆ ์ ๋ก์ƒ‰์•ฝ

[ํŒŒ์ด์ฌ/Python] ๋ฐฑ์ค€ 10026๋ฒˆ ์ ๋ก์ƒ‰์•ฝ 10026๋ฒˆ: ์ ๋ก์ƒ‰์•ฝ ์ ๋ก์ƒ‰์•ฝ์€ ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋А๋ผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ์€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ๊ณผ๋Š” ์ข€ ๋‹ค๋ฅผ ์ˆ˜

develop247.tistory.com