2021. 1. 12. 21:26ใ๐ Algorithm/๐ช๐ป Python ๋ฌธ์ ํ์ด
๋ฌธ์ ์ค๋ช
<๊ทธ๋ฆผ 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)
'๐ Algorithm > ๐ช๐ป Python ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python - ๋ฐฑ์ค 1012] ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2021.01.12 |
---|---|
[Python - ๋ฐฑ์ค 2606] ๋ฐ์ด๋ฌ์ค (0) | 2021.01.12 |
[Python - ํ๋ก๊ทธ๋๋จธ์ค Level2] ๋ ๋งต๊ฒ (0) | 2021.01.10 |