๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[๋ฐฑ์ค€]10026๋ฒˆ: ์ ๋ก์ƒ‰์•ฝ

by syLim___ 2023. 2. 24.
728x90

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

 

10026๋ฒˆ: ์ ๋ก์ƒ‰์•ฝ

์ ๋ก์ƒ‰์•ฝ์€ ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋А๋ผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ์€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ๊ณผ๋Š” ์ข€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ํฌ๊ธฐ๊ฐ€ N×N์ธ ๊ทธ๋ฆฌ๋“œ์˜ ๊ฐ ์นธ์— R(๋นจ๊ฐ•), G(์ดˆ๋ก)

www.acmicpc.net


 

1. ์ผ๋ฐ˜์ธ ๊ธฐ์ค€์œผ๋กœ bfs์ซ™ ๋Œ๋ ค์„œ ๊ตฌ์—ญ์ด ๋ช‡ ๊ฐœ์ธ์ง€ ๊ณ„์‚ฐํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

 

2. ์ ๋ก์ƒ‰์•ฝ ๊ธฐ์ค€์œผ๋กœ bfs๋ฅผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ  ์‚ด์ง ๋ณ€๊ฒฝํ•ด์คฌ๋‹ค.

 -๊ทธ๋ž˜ํ”„ ๋ชจ๋“  ์š”์†Œ๋“ค์„ ๋น„๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ

 -๋ชจ๋“  G๋ฅผ R๋กœ ๋ฐ”๊ฟ”์คฌ๋‹ค (์ ๋ก์ƒ‰์•ฝ์€ G์™€ R์„ ๊ตฌ๋ณ„ ๋ชปํ•˜๋‹ˆ ํ•˜๋‚˜๋กœ ํ†ต์ผ์‹œํ‚ด)

 

3. ์ ๋ก์ƒ‰์•ฝ ๊ธฐ์ค€์œผ๋กœ bfs ํ•œ ๋ฒˆ ๋” ๋Œ๋ ค์„œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ


BFS๋กœ ์—ฐ๊ฒฐ์š”์†Œ ๊ฐœ์ˆ˜ ๊ตฌํ•œ ๋ฐฉ์‹

 

 -์ตœ์ดˆ๋ฐฉ๋ฌธ์‹œ์— bfs๋กœ ์ธ์ ‘ํ•œ ์นธ๋“ค์„ ๋ชจ๋‘ ๋ฐฉ๋ฌธํ•˜๊ณ  True๋ฅผ ๋ฆฌํ„ด

 -๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฏธ ๋œ ์นธ์ด๋ฉด False๋ฅผ ๋ฆฌํ„ด

 -bfs๋ฆฌํ„ด๊ฐ’์ด true์ผ ๋•Œ์—๋งŒ count๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

 

๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋ฐฉ์‹

 -๊ทธ๋ž˜ํ”„ ๊ฐ’์ด ๋Œ€๋ฌธ์ž๋ผ๋ฉด ๋ฐฉ๋ฌธํ•œ์  ์—†๋Š” ์นธ์ด๋‹ค. ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์คŒ์œผ๋กœ์จ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•จ

 -๊ทธ๋ž˜ํ”„ ๊ฐ’์ด ์†Œ๋ฌธ์ž๋ผ๋ฉด ๋ฐฉ๋ฌธํ•œ ์  ์žˆ๋Š” ์นธ์ด๋‹ค.

 

from collections import deque

dx=[-1,1,0,0]
dy=[0,0,-1,1]

def bfs(x,y):
  if graph[x][y].islower(): #๋ฐฉ๋ฌธํ•œ์ ์žˆ์œผ๋ฉด
    return False

  graph[x][y] = graph[x][y].lower() #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
  q = deque()
  q.append((x,y))

  while q:
    a,b = q.popleft()
    for i in range(4):
      nx = a + dx[i]
      ny = b + dy[i]

      #๋ฒ”์œ„๋‚ด์— ์†ํ•˜๊ณ  ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฐฉ๋ฌธํ•œ ์  ์—†๋Š” ์นธ์ผ๊ฒฝ์šฐ
      if 0<=nx<n and 0<=ny<n and graph[nx][ny]==graph[a][b].upper() and graph[nx][ny].isupper():
        graph[nx][ny] = graph[nx][ny].lower() #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
        q.append((nx,ny))
      
  return True



#์ž…๋ ฅ๋ฐ›๊ธฐ
n = int(input())

graph=[]
for i in range(n):
  arr = []
  temp=input()
  for j in range(n):
    arr.append(temp[j])
  graph.append(arr)


#์ผ๋ฐ˜์ธ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
cnt1 = 0
for i in range(n):
  for j in range(n):
    if bfs1(i,j)==True:
      cnt1 += 1
print(cnt1,end=' ')

#๊ทธ๋ž˜ํ”„ ๋น„๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ & Red์™€ Green์„ ๊ฐ™์€๋ฌธ์ž๋กœ ํ†ต์ผ
for i in range(n):
  for j in range(n):
    graph[i][j] = graph[i][j].upper()
    if graph[i][j] == 'G':
      graph[i][j] = 'R'
    
#์ ๋ก์ƒ‰์•ฝ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
cnt2 = 0
for i in range(n):
  for j in range(n):
    if bfs(i,j)==True:
      cnt2 += 1
print(cnt2)

 

 

728x90