27211๋ฒ - ๋๋ ํ์ฑ
ํ์์ ํ๋๋ฐ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด ์ ํ์ด ์์ต๋๋ค! ์ด๊ฒ ๋ฌด์จ ๋ง์ด๋๋ฉด
if nx<0 or ny<0 or nx>=N or ny>=M:
continue
์ ํฌ๊ฐ ๋ณดํต BFS๋ DFS๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ด๋ฐ ์ฉ์ผ๋ก ๊ทธ๋ํ๋ฅผ ๋์ด๊ฐ ์ continue๋ฅผ ์ํค์ง ์์ต๋๊น?
๊ทผ๋ฐ ์ด ๊ทธ๋ํ๋ ์์ ๊ฐ์ด ๋๋๋ชจ์์ ํํ์ฌ์ ๋์ด๊ฐ๋ ๊ทธ๋๋ก ๋์ด๊ฐ ๋งํผ ์ฐ์ฐ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ฌธ์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ๋ก๊ธธ์ด๊ฐ 5๊ณ ํ์ฌ ๊ฐ๋ก์ธ๋ฑ์ค๊ฐ 5์ผ๋ ์ค๋ฅธ์ชฝ ํ์์ ํ๋ฉด ํ์๋๋ก๋ผ๋ฉด ๊ทธ๋ํ๋ฅผ ๋์ด์ list out of index ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด continue๋ฅผ ๋ฃ์ด์ค ํ ๋ฐ ์ด ๋ฌธ์ ๋ ๊ทธ๋ํ๊ฐ ๋๋ ํ์์ด๋ฏ๋ก 5->1๋ก ๋์ด๊ฐ ๋ค์ 1๋ฒ ์ธ๋ฑ์ค๋ฅผ ํ์ํด์ผ ํฉ๋๋ค.
N,M = map(int,input().split())
graph = []
que = deque()
for _ in range(N):
graph.append(list(map(int,input().split())))
visited = [[0]*M for _ in range(N)]
BFS ํ์์ ์ํ ์ ๋ ฅ์ ๋ฐ์์ค์๋ค. visited๋ก ๋ฐฉ๋ฌธ์ฌ๋ถ ํ์๋ ์ค๋นํ๊ฒ ์ต๋๋ค.
cnt = 0
for i in range(N):
for j in range(M):
if not visited[i][j]:
if graph[i][j] == 0:
bfs(i,j)
cnt += 1
0์ ๋น ๊ณต๊ฐ์ด๊ณ 1์ ์ฒ์ด๋ผ ํ์ํ์ง ๋ชปํ๋ ๊ณต๊ฐ์ด๋ฏ๋ก for๋ฌธ์ ๋๋ ค์ 0์ด ๋์จ๋ค๋ฉด ๊ทธ ๊ตฌ๊ฐ์ ํ์ํด์ฃผ๊ฒ ์ต๋๋ค. ํ์์ด ์๋ฃ๋๋ฉด cnt๋ณ์๋ฅผ ํ๋ ๋์ฌ์ ๋์ค์ ๋ต์ ๋์ถํ ๋ ์จ๋จน์ ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค.
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]
deque๋ฅผ import ํด์ฃผ๊ณ ์ํ์ข์ฐ ์ค์ ์ ํด์ค๋๋ค.
def bfs(x,y):
que.append([x,y])
visited[x][y] = 1
while que:
x,y = que.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
์ฌ๊ธฐ๊น์ง ํ๋ฒํ DFS์ ๋์ผํฉ๋๋ค. ๋ฐฉ๋ฌธ์ฌ๋ถ ํ์ํด์ฃผ๊ณ 4๋ฐฉํฅ ํ์์ ๋๋ ค์ฃผ๋ฉด ๋ฉ๋๋ค.
if nx>=N:
nx = nx%N
if ny>=M:
ny = ny%M
if nx<0:
nx = N + nx
if ny<0:
ny = M + ny
์ฌ๊ธฐ์ ์ด์ x, ์ฆ ์ธ๋ก๊ฐ์ด ์ธ๋ก์ ๊ธธ์ด์ธ N์ ๋์ด๊ฐ๊ฒ ๋๋ฉด ์ธ๋ก๊ฐ์ N์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์ ํ์ํ ์ธ๋ฑ์ค๊ฐ ๋ฉ๋๋ค. ๊ฐ๋ก๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๋ง์ฝ์ x๊ฐ 0 ์ดํ์ฌ์ ์์๊ฐ ๋์ค๊ฒ ์๊ธด ์ํฉ์ด๋ผ๋ฉด N์ ํด๋น ์์๋ฅผ ๋ํ ๊ฐ์ด ๋ค์ ํ์ํ ์ธ๋ฑ์ค๊ฐ ๋ฉ๋๋ค. ์)N์ 5, ํ์ฌ ์ธ๋ฑ์ค๊ฐ 0์ด๊ณ ์ ํ์ํ์ฌ nx๊ฐ -1์ด ๋์๋๋ฐ ์ ์ฐ์ฐ์ ํตํด ๊ฐ๋ก ์ต๋ ๋์ด์ธ 5-1=4๋ฅผ ํ์ํ ์ ์์
if not visited[nx][ny]:
if graph[nx][ny] == 0:
visited[nx][ny] = 1
que.append([nx,ny])
๋ฌผ๋ก ์ด ๋ชจ๋ ์กฐ๊ฑด์ ๋ฐฉ๋ฌธ์ ํ์ง ์์๊ณ ๋น ๊ณต๊ฐ(0) ์ด๋ผ๋ ์กฐ๊ฑด์ด ์๋ฐ๋์ด์ผ๋ง ์ด๋ค์ง๋๊ฒ ๊ฐ๋ฅํฉ๋๋ค.
print(cnt)
์ถ๋ ฅํ๋ฉด ์ ์์ ์ผ๋ก ๋ต์ ๋์ถํ ์ ์์ต๋๋ค.
์ ๋ ํ์ด์ฌ ์ธ์ด์ ํน์ง์ ์์์ฒ๋ฆฌ๋ 0์ธ๋ฑ์ค์์ -1๋นผ๋ฉด -1์ธ๋ฑ์ค์ ์ ๊ทผํ์ฌ
if nx<0:
nx = N + nx
if ny<0:
ny = M + ny
ํด๋น ๊ตฌ๋ฌธ์ ๋ฑํ ํ์ ์์ ์ค ์์๋๋ฐ 60ํผ์ฏค ๊ฐ์ ํ๋ ธ์ต๋๋ค ๊ฐ ๋์์ต๋๋ค.
์๋ง -2๊ฐ ๋์จ๋ค๋์ง, x์ y๊ฐ์ด ๋๋ค ์์๊ฐ ๋์จ๋ค๋์ง ํ๋ฉด ๋ณ์๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.