https://www.acmicpc.net/problem/27211
๋ฌธ์ ์ ๊ทธ๋ฆผ์ด ์ด๋ง๋ฌด์ํ๋๋ฐ... ๊ทธ๋ฅ ๊ทธ๋ํ ํ์ ๋ฌธ์ ์๋ค.
4963๋ฒ ์ฌ์ ๊ฐ์, ํน์ 2667๋ฒ ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ์ ์ ์ฌํ ๋ฌธ์ ์ด๋ค.
์ ์ผํ๊ฒ ์ถ๊ฐ๋ ์กฐ๊ฑด์ 0๋ฒ ํ๊ณผ (N-1) ๋ฒ ํ์ด ์ฐ๊ฒฐ๋์ด ์๊ณ , 0๋ฒ ์ด๊ณผ (M-1) ๋ฒ ์ด์ด ์ฐ๊ฒฐ๋์ด ์๋ค๋ ์ ์ด๋ค.
์ด ์กฐ๊ฑด์ ๊ณ ๋ คํด์ ์ธ์ ํ ์นธ์ ํ์ํ ๋ 0 <= nx < N๊ณผ ๊ฐ์ index ์ ํ ์กฐ๊ฑด์ ๋๋ ๋์ , nx % N์ index๋ฅผ ์ดํด๋ณด๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์๋ค.
๋, visited ๋ฐฐ์ด์ ๋ฐ๋ก ๋ง๋ค์ด์ฃผ์ง ์๊ณ ๊ทธ๋ฅ ํ์ํ๋ฉด ๋ฐ๋ก๋ฐ๋ก ์ง๋๋ฅผ ๊ฐฑ์ ํด ์คฌ๋ค.
DFS์ BFS ์ค ์ด๋ ๊ฒ์ ์ฌ์ฉํด์ ํ์ด๋ ์๊ด์ด ์๊ฒ ์ง๋ง DFS๋ก ํ์๋ค.
N, M = map(int, input().split())
world_map = [list(map(int, input().split())) for _ in range(N)]
dx, dy = [0, 0, -1, 1], [-1, 1, 0, 0]
answer = 0
for i in range(N):
for j in range(M):
if world_map[i][j]:
continue
answer += 1
stack = [[i, j]]
while stack:
x, y = stack.pop()
for n in range(4):
nx = (x + dx[n]) % N
ny = (y + dy[n]) % M
if not world_map[nx][ny]:
stack.append([nx, ny])
world_map[nx][ny] = 1
print(answer)
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 27210 ์ ์ ๋ชจ์๋ ์ฌ๋น - ํ์ด์ฌ (1) | 2023.01.14 |
---|---|
๋ฐฑ์ค 27212 ๋ฏธํ - ํ์ด์ฌ (4) | 2023.01.14 |
๋ฐฑ์ค 1002 ํฐ๋ - ํ์ด์ฌ (2) | 2022.12.30 |
๋ฐฑ์ค 7785 ํ์ฌ์ ์๋ ์ฌ๋ - ํ์ด์ฌ (0) | 2022.12.29 |
๋ฐฑ์ค 2839 ์คํ ๋ฐฐ๋ฌ - ํ์ด์ฌ (0) | 2022.12.29 |