BOJ - 2667

주의·2023년 12월 1일
0

boj

목록 보기
23/214

백준 문제 링크
단지번호붙이기

❓접근법

  1. BFS 방식을 사용했다.
  2. 좌표의 값이 1이라면 queue에 넣어주고, count를 1 더해준다.
    그래서 총 연결되어있는 1의 개수만큼 count를 구하고, 더이상 없을 경우 count를 return하는 함수를 만들었다.
  3. 지도의 크기만큼 함수를 적용해야 하므로, for문 2개로 지도의 원소에 접근하여 값이 1이라면 좌표를 함수에 넣어서 count를 구해줬다.
  4. 구한 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)

첨엔 '각 단지내 집의 수를 오름차순으로 정렬하여 한 줄에 하나씩 출력하시오.'라는 문장을 못봐서 그냥 출력했다가 제출 실패했다. ㅋㅋㅋ

0개의 댓글