[백준] 2667번(단지번호붙이기)

·2023년 8월 22일

백준 문제풀이

목록 보기
107/159

백준 2667번


최종 제출 코드

import sys
input = sys.stdin.readline

n = int(input().rstrip())
array = [input().rstrip() for i in range(n)]
visited = [[False for i in range(n)] for j in range(n)]
result = []


# 단지 내 아파트 수를 구하기 위한 함수
def solution(row, col):
  
  global cnt

  # 인덱스가 범위를 벗어났으면 return
  if row<0 or row>=n or col<0 or col>=n: return
  # 이미 들른 곳이거나 아파트가 없는 곳이면 return
  if visited[row][col] == True or array[row][col] == "0": return

  cnt += 1
  visited[row][col] = True

  # 재귀함수호출
  solution(row+1,col)
  solution(row,col+1)
  solution(row,col-1)
  solution(row-1,col)

# array를 돌면서 단지내 첫번째 아파트를 찾는다
# 첫번째 아파트는 재귀함수 호출을 통해 찾아지면 안되고,
# 첫번째 아파트를 찾은 경우 아파트 수가 처음부터 카운트 된다.
for i in range(n):
  for j in range(n):
    # 단지내 첫번째 아파트 발견
    if array[i][j] == "1" and visited[i][j] == False:
      cnt = 0
      solution(i,j)
      # 단지내 아파트 수 result에 붙임
      result.append(cnt)

# 오름차순으로 정렬
result.sort()

# 결과값 출력
print(len(result))
for i in range(len(result)):
  print(result[i])
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글