백준 문제 링크
단지번호붙이기
- BFS 방식을 사용했다.
- 좌표의 값이 1이라면 queue에 넣어주고, count를 1 더해준다.
그래서 총 연결되어있는 1의 개수만큼 count를 구하고, 더이상 없을 경우 count를 return하는 함수를 만들었다.- 지도의 크기만큼 함수를 적용해야 하므로, for문 2개로 지도의 원소에 접근하여 값이 1이라면 좌표를 함수에 넣어서 count를 구해줬다.
- 구한 count를 answer에 넣은 후 answer를 정렬하여 출력하면 끝!
from collections import deque
N = int(input())
lst = [[0] * N for _ in range(N)]
for i in range(N):
x = input()
for j in range(len(x)):
lst[i][j] = int(x[j])
start_x, start_y = 0,0
end_x, end_y = N-1,N-1
dx = [0,0,1,-1]
dy = [1,-1,0,0]
def bfs(x,y):
queue = deque()
queue.append((x,y))
count = 0
lst[x][y] = 0 # visited의 역할
while queue:
x,y = queue.popleft()
count += 1
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if (0<=nx<N) and (0<=ny<N) and (lst[nx][ny] == 1):
lst[nx][ny] = 0
queue.append((nx,ny))
return count
answer = []
for i in range(len(lst)):
for j in range(len(lst)):
if lst[i][j] == 1:
count = bfs(i,j)
answer.append(count)
answer.sort()
print(len(answer))
for i in answer:
print(i)
첨엔 '각 단지내 집의 수를 오름차순으로 정렬하여 한 줄에 하나씩 출력하시오.'라는 문장을 못봐서 그냥 출력했다가 제출 실패했다. ㅋㅋㅋ