์ฌ์ฉ์ธ์ด : PYTHON
ํ์ด
1. ํ ์ฐ์ ๋ฐฉํฅ์ผ๋ก ํ์์ ์งํํ๋ค 0์ธ ๊ณณ์ ๋ง๋๋ฉด BFS๋ฅผ ์ํ(์ฐ์์ ์ผ๋ก ํด๋ฆญ)ํ๋ฉฐ ์ ๋ต(ans)๋ฅผ 1์ฆ๊ฐ
์ด๋ 0์ผ๋ก ์ธํด ์ฐ์์ ์ผ๋ก ํด๋ฆญ๋ ๊ณณ์ -
๋ก ํ์
2. ํ ์ฐ์ ๋ฐฉํฅ์ผ๋ก ๋ค์ ํ์ํ๋ฉฐ ์ฐ์์ ์ผ๋ก ํด๋ฆญ๋์ง ์์ ๊ณณ์ ๊ฐฏ์๋งํผ ์ ๋ต(ans)์ ์ถ๊ฐ
์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
# SWEA ํํํํ ์ง๋ขฐ์ฐพ๊ธฐ
# 1. ์ ์ฒด๋ฅผ ํ์ํ๋ค 0์ ๋ง๋๋ฉด BFS ์ํ (๋ฐฉ๋ฌธ์ฒดํฌ), cnt += 1
# 2. ์ฒดํฌ ๋์ง ์์ ์นธ ์ธ๊ธฐ
def click(r, c): # ํด๋ฆญ์ ์ํํ๊ณ (์ค๋ณต ํด๋ฆญ์ ์ํํ์ง ์์), 0์ด๋ฉด True๋ฅผ ๋ฆฌํดํ๋ ํจ์
if arr[r][c] == '*' or arr[r][c]=='-':
return False
if chk[r][c]: # ํด๋ฆญํ๋ ๊ณณ์ ๋ค์ ํด๋ฆญํ์ง ์์, chk[r][c]๊ฐ true์์ผ๋ฉด ์ด๋ฏธ BFS์ํ ํ์ ๊ฒ์(ํ ์ฐ์ ์ผ๋ก click์ ์ํํ๊ธฐ ๋๋ฌธ)
return False
chk[r][c]=True
cnt = 0
for d in range(8):
nr = r + dr[d]
nc = c + dc[d]
if nr < 0 or nr >= N: continue
if nc < 0 or nc >= N: continue
if arr[nr][nc]=='*':
cnt+=1
# arr[r][c]=cnt # ๋ฐฉ๋ฌธ์ฒดํฌ๋ visited์์ ์ํํ๊ณ ์ฐ์ ํญ๋ฐ์ -๋ก ํ์ํ๊ธฐ ๋๋ฌธ์ ํด๋ฆญํ ๊ณณ์ ์ซ์ ํ์๋ ๋ถํ์ํจ
if cnt==0:
return True
return False
def bfs(r,c): # ์ฐ์ ํด๋ฆญ์ ์ํํ๊ณ '-' ํ์
queue = deque()
queue.append([r,c])
arr[r][c] = '-'
while queue:
row,col = queue.popleft()
for d in range(8):
nr = row + dr[d]
nc = col + dc[d]
if nr<0 or nr>=N : continue
if nc<0 or nc>=N : continue
if click(nr,nc):
queue.append([nr,nc])
arr[nr][nc] = '-' # 0์ผ๋ก ์ธํด์ ์ฐ์์ ์ผ๋ก ํฐ์ง ๊ณณ์ '-'๋ก ํ์
T = int(input())
for t in range(1, T + 1):
N = int(input())
arr = [list(input().strip()) for _ in range(N)]
chk = [[False] * N for _ in range(N)]
ans = 0
for i in range(N): # ์ ์ฒด๋ฅผ ํ์ํ๋ฉฐ 0์ด๋ฉด bfs์ํ
for j in range(N):
if click(i, j): # ํด๋ฆญ ํ๋๋ฐ 0์ด๋ฉด
bfs(i, j)
ans+=1
for i in range(N): # ์ฐ์ํด๋ฆญ์ด ์ผ์ด๋์ง ์์๊ณณ์ ๊ฐฏ์๋ฅผ ์นด์ดํธ
for j in range(N):
if arr[i][j]!='-' and arr[i][j]!='*': # arr[i][j]=='.'๋ก ํด๋ ๋จ
ans+=1
print('#{} {}'.format(t,ans))
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 9465 ์คํฐ์ปค (2) | 2023.11.29 |
---|---|
bfs ๋ฐฉ๋ฌธ์ฒดํฌ ์์น (2) | 2023.11.22 |
[swea 3304-ํ์ด์ฌ]์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด (0) | 2023.06.21 |
[swea 3307-ํ์ด์ฌ]์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (0) | 2023.06.21 |
[swea 4615-ํ์ด์ฌ]์ฌ๋ฏธ์๋ ์ค์ ๋ก ๊ฒ์ (0) | 2023.06.21 |