ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์ง๋์์ ์์ญ์ ํ์ํ์ฌ ๋จ์ง๊ฐ ๋ช ๊ฐ์ธ์ง ํ์ธํ๋ ๋ฌธ์ ์ด๋ค. ๋จ์ง๋ฅผ ํ์ธ ํ๊ธฐ ์ํด์๋ BFS๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ํ์ธํ๋ฉฐ ํ์์ ์งํํ๋ฉด ๋๋ค.
- ๋ชจ๋ ์์์ ์ ํ์ธํ๊ธฐ ์ํด 2์ค ๋ฐ๋ณต๋ฌธ์ผ๋ก N * N ๋งํผ์ ์์์ ์ ํ์ํ๋ค.
-
์์์ ์ด ๋จ์ง(1์ธ ๊ฒฝ์ฐ)๋ผ๋ฉด ์์์ ์ ๊ธฐ์ค์ผ๋ก ์, ํ, ์ข, ์ฐ๋ก ํ์ํ์ฌ ์ฐ๊ฒฐ๋ ์ง์ด ์๋์ง ํ์ธํ๋ค.
- ์ง๋ ๋ด์ ์์นํ๋์ง ํ์ธ ํ๊ธฐ ์ํด 0 <= x < N && 0 <= y < N๊ณผ ๊ฐ์ ์กฐ๊ฑด์ด ํ์ํ๋ค.
- ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๊ฒฝ์ฐ graph[x][y]๋ 1์ด์ฌ์ผ ํ๋ค.
- ํ๋์ ์ ์ ์์์ผ๋ก ์, ํ, ์ข, ์ฐ๋ก ํ์์ ๋ํ๋ฉด์ ๋ ์ด์ ๋ฐฉ๋ฌธํ ์ ์๋ ์ง์ด ์๋ค๋ฉด ํ๋์ ๋จ์ง์ ๋ํ ํ์์ ์๋ฃํ ๊ฒ์ด๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y):
return 0 <= x < n and 0 <= y < n and graph[x][y]
def bfs(start):
q = deque([start])
dirs = ((-1, 0), (1, 0), (0, 1), (0, -1))
cnt = 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])
cnt += 1
return cnt
if __name__ == "__main__":
n = int(stdin.readline())
graph = [list(map(int, stdin.readline().strip())) for _ in range(n)]
answer = []
for x in range(n):
for y in range(n):
if graph[x][y]:
graph[x][y] = 0
answer.append(bfs([x, y]))
print(len(answer))
print('\n'.join(map(str, sorted(answer))))
ํ์ํ ์ง์ 0์ผ๋ก ํ์ํ๋ฉด ์ฌํ์์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก, ๋ณ๋์ visited ๋ฆฌ์คํธ๋ฅผ ํตํด ์ฒดํฌํ ํ์๊ฐ ์๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 2178 ๋ฏธ๋ก ํ์ (0) | 2020.07.21 |
---|---|
๋ฐฑ์ค: 4963 ์ฌ์ ๊ฐ์ (0) | 2020.07.21 |
๋ฐฑ์ค: 13023 ABCDE (0) | 2020.07.20 |
๋ฐฑ์ค: 11724 ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2020.07.20 |
๋ฐฑ์ค: 1260 DFS์ BFS (0) | 2020.07.20 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ