https://www.acmicpc.net/problem/2667
2667번: 단지번호붙이기
<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여
www.acmicpc.net
문제
내 풀이
import sys
from collections import deque
input = sys.stdin.readline
# 입력
n = int(input())
gangnam = [list(map(int, list(input().rstrip()))) for _ in range(n)]
visited = [[0] * (n) for _ in range(n)]
ans = []
# 상 우 하 좌
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
def bfs_2d(r, c):
count = 1
que = deque([])
que.append([r, c])
visited[r][c] = 1
while que:
[x, y] = que.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if (0 <= nx < n) and (0 <= ny < n) and visited[nx][ny] == 0 and gangnam[nx][ny] == 1:
visited[nx][ny] = 1
que.append([nx, ny])
count += 1
return count
# 답은 알아서 가공 후 제출
danji = 0
for i in range(n):
for j in range(n):
if gangnam[i][j] == 1 and visited[i][j] == 0:
temp = bfs_2d(i, j)
ans.append(temp)
danji += 1
print(danji)
ans.sort()
for i in range(len(ans)):
print(ans[i])
해설
2차원 상하좌우 이동 문제 중 가장 정석적인 방식으로 진행되는 문제라고 생각합니다.
'sw사관학교 정글 2기 > 03 DFS, BFS, 위상정렬' 카테고리의 다른 글
[위상정렬] 백준 음악프로그램 2623번 with Python3 (0) | 2021.08.25 |
---|---|
[BFS] 백준 섬의 개수 2588번 with Python3 (0) | 2021.08.25 |
[BFS] 백준 숨바꼭질 1697번 with Python3 (0) | 2021.08.25 |
[위상정렬] 백준 작업 2056번 with Python3 ★★★ (0) | 2021.08.25 |
[BFS] 백준 숨바꼭질 1697번 with Python3 (0) | 2021.08.24 |
댓글