[Python - ๋ฐฑ์ค€ 2667] ๋‹จ์ง€๋ฒˆํ˜ธ ๋ถ™์ด๊ธฐ

2021. 1. 12. 21:26ใ†๐Ÿ“š Algorithm/๐Ÿ’ช๐Ÿป Python ๋ฌธ์ œ ํ’€์ด

๋ฐ˜์‘ํ˜•
 

2667๋ฒˆ: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ง€๋„๊ฐ€ ์žˆ๋‹ค. 1์€ ์ง‘์ด ์žˆ๋Š” ๊ณณ์„, 0์€ ์ง‘์ด ์—†๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ด ์ง€๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ฒฐ๋œ ์ง‘์˜ ๋ชจ์ž„์ธ ๋‹จ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ๋‹จ์ง€์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋ ค ํ•œ๋‹ค. ์—ฌ

www.acmicpc.net

๋ฌธ์ œ ์„ค๋ช…

<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ง€๋„๊ฐ€ ์žˆ๋‹ค. 1์€ ์ง‘์ด ์žˆ๋Š” ๊ณณ์„, 0์€ ์ง‘์ด ์—†๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ด ์ง€๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ฒฐ๋œ ์ง‘์˜ ๋ชจ์ž„์ธ ๋‹จ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ๋‹จ์ง€์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋ ค ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์–ด๋–ค ์ง‘์ด ์ขŒ์šฐ, ํ˜น์€ ์•„๋ž˜์œ„๋กœ ๋‹ค๋ฅธ ์ง‘์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ๋Œ€๊ฐ์„ ์ƒ์— ์ง‘์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์—ฐ๊ฒฐ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. <๊ทธ๋ฆผ 2>๋Š” <๊ทธ๋ฆผ 1>์„ ๋‹จ์ง€๋ณ„๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ธ ๊ฒƒ์ด๋‹ค. ์ง€๋„๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋‹จ์ง€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๊ฐ ๋‹จ์ง€์— ์†ํ•˜๋Š” ์ง‘์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅํ˜•์‹

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ง€๋„์˜ ํฌ๊ธฐ N(์ •์‚ฌ๊ฐํ˜•์ด๋ฏ€๋กœ ๊ฐ€๋กœ์™€ ์„ธ๋กœ์˜ ํฌ๊ธฐ๋Š” ๊ฐ™์œผ๋ฉฐ 5≤N≤25)์ด ์ž…๋ ฅ๋˜๊ณ , ๊ทธ ๋‹ค์Œ N์ค„์—๋Š” ๊ฐ๊ฐ N๊ฐœ์˜ ์ž๋ฃŒ(0ํ˜น์€ 1)๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.

์ถœ๋ ฅํ˜•์‹

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ด ๋‹จ์ง€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋‹จ์ง€๋‚ด ์ง‘์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

ํ’€์ด ๊ณผ์ •

BFS๋กœ maps[i][j] ๊ฐ€ 1์ด๊ณ  checkbfs[i][j]๊ฐ€ False์ธ ๊ฒƒ๋“ค์„ ๊ฒ€์‚ฌํ•˜์˜€๋‹ค. BFS์˜ ๊ธฐ๋ณธ ํ˜•์‹์ฒ˜๋Ÿผ queue๋ฅผ ์ด์šฉํ•˜์—ฌ queue์—์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ด ์ƒํ•˜์ขŒ์šฐ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ฐ™์€ ๊ฐ’์ด๊ณ , checkbfs[new_x][new_y]๊ฐ€ False์ธ ๊ฒƒ๋“ค์„ queue์— ๋‹ค์‹œ ๋„ฃ์—ˆ๋‹ค. ์ด๋•Œ size ๋ณ€์ˆ˜๊ฐ’์— queue์— ๋„ฃ์–ด์ง„ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋งŒํผ +1 ํ•ด์ฃผ์–ด BFS ๊ฐ€ ๋ชจ๋‘ ๋๋‚˜๋ฉด return ์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

queue์— ์›์†Œ๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ๊ฒ€์‚ฌ๊ฐ€ ์—†์ด 0์ด return ๋˜์ง€๋งŒ ๊ตฌ์—ญ์€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ answer๋ฅผ ์ถœ๋ ฅ์‹œํ‚ฌ๋•Œ 0์ธ ๊ฐ’๋“ค์—๊ฒŒ๋Š” 1๋กœ printํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

์•„์‰ฌ์šด ์  ) input์„ ๋”ฐ๋กœ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— input์„ ๋ฐ›๋Š” ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ๋”๋Ÿฌ์šด ๊ฑฐ๊ฐ™๋‹ค. input ๋ฐ›๋Š” ๋ถ€๋ถ„, maps๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„ answer๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ถ€๋ถ„๋„ ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆ ์„œ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค : )

import sys
from collections import deque


def bfs(x, y):
    dxy = [(0, 1), (-1, 0), (0, -1), (1, 0)]
    queue = deque([(x, y)])
    size = 0
    while queue:
        item = queue.popleft()
        for xy in dxy:
            new_x = int(item[0] + xy[0])
            new_y = int(item[1] + xy[1])
            if 0 <= new_x < n and 0 <= new_y < n and check[new_x][new_y] != 1:
                if maps[new_x][new_y] == maps[item[0]][item[1]]:
                    queue.append((new_x, new_y))
                    check[new_x][new_y] = 1
                    size += 1

    return size


answer = []
n = int(input())
maps = []
check = [[0 for _ in range(n)] for _ in range(n)]
for _ in range(n):
    tmp_map = list(sys.stdin.readline())
    tmp_map.remove('\n')
    maps.append(tmp_map)

for i in range(n):
    for j in range(n):
        if maps[i][j] != '0':
            if check[i][j] != 1:
                answer.append(bfs(i, j))

answer.sort()
print(len(answer))
for item in answer:
    if item == 0:
        print(1)
    else:
        print(item)

 

 

 

 

๋ฐ˜์‘ํ˜•