CodingTest/Baekjun Online Judge
[ BOJ / 파이썬 ] 2667 단지 번호 붙이기
EEOOOO
2022. 10. 8. 18:46
- 30분 소요
- 와 .. ㅠㅜ 실수해서 10분을 날려먹었다.. bfs처음 시작하면서 q에 첫 원소 넣을 때 해당 원소를 방문처리하는 걸 놓쳤다.
- 덕분에 이중 방문해서 예상 값보다 1씩 더 나오는 에러 잡느라 시간 걸렸다.
- 문제 자체는 단순한 bfs적용, 2583 영역 구하기랑 같은 맥락의 문제였다.
- python list unpaking operator쓰는 법 까먹어서 검색해서 찾아옴..
import sys
input = sys.stdin.readline
from collections import deque
n = int(input())
board = [list(map(int, list(input().strip()))) for _ in range(n)]
visited = [[False]*n for _ in range(n)]
q = deque([])
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
count = 0
homes_by_town = []
def bfs():
home = 1
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < n and board[nx][ny] == 1 and not visited[nx][ny]:
visited[nx][ny] = True
q.append((nx, ny))
home += 1
return home
for i in range(n):
for j in range(n):
if board[i][j] == 1 and not visited[i][j]:
q.append((i, j))
visited[i][j] = True
homes_by_town.append(bfs())
count += 1
print(count)
print(*homes_by_town.sorted())