๐Ÿค–/๋ฐฑ์ค€

๋ฐฑ์ค€ 2667: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ (Python)

sssbin 2022. 1. 31. 18:45

 

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

 

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

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

www.acmicpc.net

 

๋ฆฌ์ŠคํŠธ ๋Œ๋ฉด์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ 1์ด๋ฉด ์ƒํ•˜์ขŒ์šฐ ์‚ดํ”ผ๋ฉด์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

์ฝ”๋“œ๊ฐ€ ๋งค์šฐ ๋„ˆ์ €๋ถ„ํ•œ ๋Š๋‚Œ,,,

 

# dfs

n = int(input())
list = [[] for _ in range(n)]

for i in range(n):
    data = input()
    for j in range(n):
        list[i].append(int(data[j]))

def dfs(x, y):
    if x < 0 or x >= n or y < 0 or y >= n:
        return False
    if list[x][y] == 1:
        global count
        count += 1
        list[x][y] = 0
        dfs(x+1, y)
        dfs(x-1, y)
        dfs(x, y+1)
        dfs(x, y-1)
        return True
    else:
        return False

cList = []
result = 0

for i in range(n):
    for j in range(n):
        count = 0
        if dfs(i, j):
            cList.append(count)
            result += 1

cList.sort()
print(result)
for i in range(len(cList)):
    print(cList[i])
# bfs

from collections import deque

n = int(input())
list = [[] for _ in range(n)]

for i in range(n):
    data = input()
    for j in range(n):
        list[i].append(int(data[j]))

dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]

def bfs(x, y):
    global count
    queue = deque()

    if list[x][y] == 1:
        queue.append([x, y])
        list[x][y] = 0

        while queue:
            q1, q2 = queue.popleft()
            count += 1

            for i in range(4):
                mx = q1 + dx[i]
                my = q2 + dy[i]

                if mx < 0 or mx >= n or my < 0 or my >= n:
                    continue

                if list[mx][my] == 1:
                    queue.append([mx, my])
                    list[mx][my] = 0

    return count

result = 0
cList = []
for i in range(n):
    for j in range(n):
        count = 0
        if bfs(i, j) > 0:
            result += 1
            cList.append(count)

cList.sort()
print(result)
for i in range(len(cList)):
    print(cList[i])