ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์ฃผ์ด์ง ์ง๋์์ ์ฌ์ ๊ฐ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. 2667 ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ์ ์ ์ฌํ ๋ฌธ์ ์ด์ง๋ง ๊ฒฝ์ฐ์ ์๊ฐ ์ถ๊ฐ๋ ๋ฌธ์ ์ด๋ค. ์ํ์ข์ฐ๋ฟ ์๋๋ผ, ๋๊ฐ์ ์ผ๋ก ์ธ์ ํ ๊ฒฝ์ฐ๋ ๊ฐ์ ์ฌ์ผ๋ก ํ๋จํ๋ค. ์ฆ, ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ๋์ ์ ์์ ์ด 8๋ฐฉํฅ์ผ๋ก ํ์์ ์งํํ๋ฉด ๋๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y):
return 0 <= x < h and 0 <= y < w and graph[x][y]
def bfs(start):
q = deque([start])
# ์, ํ, ์ข, ์ฐ
dirs = ((-1, 0), (1, 0), (0, 1), (0, -1),
# ๋๊ฐ์
(-1, 1), (-1, -1), (1, -1), (1, 1))
while q:
cur_x, cur_y = q.popleft()
for x, y in dirs:
next_x, next_y = cur_x + x, cur_y + y
if visitable(next_x, next_y):
graph[next_x][next_y] = 0
q.append([next_x, next_y])
return 1
if __name__ == "__main__":
while True:
w, h = map(int, stdin.readline().split())
if not w and not h:
break
graph = [list(map(int, stdin.readline().split())) for _ in range(h)]
answer = 0
print(graph)
for x in range(h):
for y in range(w):
if graph[x][y]:
graph[x][y] = 0
answer += bfs([x, y])
print(answer)
๋ณดํต ๊ทธ๋ํ๋ฅผ N * M์ผ๋ก ์ฃผ๋ ๋ฐ๋ฉด ์ด ๋ฌธ์ ๋ W, H๋ก ์ฃผ์ด x, y์ ๋ฒ์๋ฅผ H, W๋ก ํ์ฌ์ผ ํ๋ค๋ ์ฐจ์ด๋ ์๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 7576 ํ ๋งํ (0) | 2020.07.22 |
---|---|
๋ฐฑ์ค: 2178 ๋ฏธ๋ก ํ์ (0) | 2020.07.21 |
๋ฐฑ์ค: 2667 ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2020.07.21 |
๋ฐฑ์ค: 13023 ABCDE (0) | 2020.07.20 |
๋ฐฑ์ค: 11724 ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2020.07.20 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ