https://www.acmicpc.net/problem/2667
- 대각선상에 집이 있는 경우는 연결된 것이 아니다 == 상하좌우 확인
DFS
import sys
N = int(sys.stdin.readline().rstrip())
graph = [ list(map(int,sys.stdin.readline().rstrip())) for _ in range(N)]
result = []
cnt = 0
def dfs(x, y):
global cnt
if x < 0 or x >= N or y < 0 or y >= N:
return False
if graph[x][y] == 1:
cnt += 1
graph[x][y] = 0
dfs(x-1,y)
dfs(x+1,y)
dfs(x,y-1)
dfs(x,y+1)
return True
return False
for i in range(N):
for j in range(N):
if dfs(i,j):
result.append(cnt)
cnt2 = 0
result.sort()
print(len(result))
for i in result:
print(i)
파이썬 코딩 도장: 33.1 변수의 사용 범위 알아보기
Unit 33. 클로저 사용하기 이번에는 변수의 사용 범위와 함수를 클로저 형태로 만드는 방법을 알아보겠습니다. 참고로 클로저는 개념이 다소 어려울 수 있으므로 변수의 사용 범위부터 알아본 뒤
dojang.io
- 변수 사용 범위 이해하기. global, nonlocal
BFS
import sys
from collections import deque
N = int(sys.stdin.readline().rstrip())
graph = []
result = []
cnt = 0
for _ in range(N):
graph.append(list(map(int, sys.stdin.readline().rstrip())))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(x, y):
global cnt
queue = deque() # 큐 선언
queue.append([x, y])
cnt += 1
while queue:
x, y = queue.popleft()
graph[x][y] = 0
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= N or ny < 0 or ny >= N:
continue
if graph[nx][ny] == 0:
continue
if graph[nx][ny] == 1:
graph[nx][ny] = 0
queue.append([nx, ny])
cnt += 1
for i in range(N):
for j in range(N):
if graph[i][j] == 1:
bfs(i, j)
result.append(cnt)
cnt = 0
result.sort()
print(len(result))
for i in result:
print(i)
'CT' 카테고리의 다른 글
[Python] 백준 1012번 : 유기농 배추 (1) | 2024.10.12 |
---|---|
[알고리즘 고득점 Kit] Heap : 더 맵게 (0) | 2024.10.05 |
[Python] 백준 2606번 : 바이러스 (1) | 2024.09.09 |
[Python] 백준 2178번 : 미로 탐색 (0) | 2024.09.08 |
[Python] 백준 1260번 : DFS와 BFS (3) | 2024.07.24 |
댓글