[Python] 2667번 단지번호붙이기

이세령·2023년 6월 18일
0

알고리즘

목록 보기
35/43

문제

https://www.acmicpc.net/problem/2667

풀이과정

  • 입력

    지도의 크기 N
    줄마다 N개의 자료
    → N x N

  • 출력

    총 단지수, 각 단지내 집의 수 오름차순

import sys
from collections import deque
input = sys.stdin.readline

n = int(input())

g = [list(map(int, input().rstrip())) for _ in range(n)]

# 상하좌우
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def bfs(g, x, y):
    cnt = 1
    q = deque()
    q.append((x, y))

    g[x][y] = 0

    while q:
        x, y = q.popleft()

        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]

            # 벗어나지 않게 범위 처리
            if nx < 0 or nx >= n or ny < 0 or ny >= n:
                continue

            if g[nx][ny] == 1:
                cnt += 1
                g[nx][ny] = 0  # 갔던곳은 다시 못가게 0으로
                q.append((nx, ny))
    return cnt

result = []

# 1의 처음 좌표를 찾아주어야 함

for i in range(n):
    for j in range(n):
        if g[i][j] == 1:
            result.append(bfs(g, i, j))
result.sort()
print(len(result))
for i in range(len(result)):
    print(result[i])

처음에 예제에서 원하는 값이 나와서 제출했더니 틀렸다고 나왔다.
생각해보니 오름차순으로 출력해야하는데 정렬을 안했었다,,

profile
https://github.com/Hediar?tab=repositories

0개의 댓글