BOJ | 2667_๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ - PYTHON
๋ฌธ์
https://www.acmicpc.net/problem/2667
์๊ณ ๋ฆฌ์ฆ
์ ๋ฐ์ดํฐ๋ฅผ ๋๋ฉด์ ์ง์ด ์์ผ๋ฉด์, ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ ์ฐพ์์ผํ๊ธฐ์ DFS๋ฅผ ์ฝ๊ฒ ๋ ์ฌ๋ฆด ์ ์์๋ค
๋ด ํ์ด
import sys
input = sys.stdin.readline
## 3. DFS
def DFS(x,y):
global result
stack = [(x,y)]
# ๋ฐฉ๋ฌธํ ๊ณณ์ result(๋ช๋จ์ง์ธ์ง) ๊ฐ์ผ๋ก ๋ณํ
visited[x][y] = result
cnt = 1 # ๋จ์ง ๋ณ ์ง์ด ๋ช ๊ฐ ์๋์ง
while stack:
sx, sy = stack.pop()
dx = [-1, 1, 0, 0] # ์ํ์ข์ฐ
dy = [0, 0, -1, 1]
for dir in range(4):
nx = sx + dx[dir]
ny = sy + dy[dir]
if 0 <= nx < N and 0 <= ny < N:
if data[nx][ny] == 1 and not visited[nx][ny]:
visited[nx][ny] = result
cnt += 1
stack.append((nx, ny))
result += 1
return cnt
## 1. ์
๋ ฅ ๋ฐ๊ธฐ
N = int(input())
data = [list(map(int, input().rstrip())) for _ in range(N)]
visited = [[0]*N for _ in range(N)]
result = 1 # ๋จ์ง ์
result_list = [] # ๋จ์ง ์๋ฅผ ๋ด์ ๋ฆฌ์คํธ(๋์ค์ sortํด์ ๋จ์ง ๋ด ์ง์ ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ)
## 2. ๋ฐฐ์ด ๋๋ฉด์ ์ง์ด ์๊ณ ๋ฐฉ๋ฌธํ์ง ์์์ ๊ฒฝ์ฐ์ DFS
for i in range(N):
for j in range(N):
if data[i][j] == 1 and not visited[i][j]:
result_list.append(DFS(i,j))
## 4. ์ถ๋ ฅ
result_list.sort()
print(len(result_list))
for i in result_list:
print(i)
'๐ป Coding > [Algorithm]Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ํํฐ์ด | ์ฐ๋ฌผ ์ ๊ฐ๊ตฌ๋ฆฌ โญโญโญ - PYTHON (0) | 2024.03.22 |
---|---|
์ํํฐ์ด | ๊ฐ์์ค ๋ฐฐ์ โญโญโญ - PYTHON (0) | 2024.03.20 |
์ํํฐ์ด | ์ํผ๋ฐ์ด๋ฌ์ค โญโญโญ- PYTHON (0) | 2024.03.20 |
์ด์ฝํ | ๋ณผ๋ง๊ณต ๊ณ ๋ฅด๊ธฐ (0) | 2024.01.31 |
์ํํฐ์ด | ๋ฐ์ด๋ฌ์ค (0) | 2024.01.24 |