2021. 1. 12. 21:33ใ๐ Algorithm/๐ช๐ป Python ๋ฌธ์ ํ์ด
๋ฌธ์ ์ค๋ช
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์ ํจ๊ณผ์ ์ธ ๋ฐฐ์ถํฐ์ง๋ ์ด๋ฅผ ๊ตฌ์ ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค. ์ด ์ง๋ ์ด๋ ๋ฐฐ์ถ๊ทผ์ฒ์ ์์ํ๋ฉฐ ํด์ถฉ์ ์ก์ ๋จน์์ผ๋ก์จ ๋ฐฐ์ถ๋ฅผ ๋ณดํธํ๋ค. ํนํ, ์ด๋ค ๋ฐฐ์ถ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ผ๋ ์ด๊ณ ์์ผ๋ฉด ์ด ์ง๋ ์ด๋ ์ธ์ ํ ๋ค๋ฅธ ๋ฐฐ์ถ๋ก ์ด๋ํ ์ ์์ด, ๊ทธ ๋ฐฐ์ถ๋ค ์ญ์ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธ๋ฐ์ ์ ์๋ค.
(ํ ๋ฐฐ์ถ์ ์ํ์ข์ฐ ๋ค ๋ฐฉํฅ์ ๋ค๋ฅธ ๋ฐฐ์ถ๊ฐ ์์นํ ๊ฒฝ์ฐ์ ์๋ก ์ธ์ ํด์๋ค๊ณ ๊ฐ์ฃผํ๋ค)
ํ๋๊ฐ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ๋ ์ ๊ณ ๋ฅด์ง ๋ชปํด์ ๋ฐฐ์ถ๋ฅผ ๊ตฐ๋ฐ๊ตฐ๋ฐ ์ฌ์ด๋์๋ค. ๋ฐฐ์ถ๋ค์ด ๋ชจ์ฌ์๋ ๊ณณ์๋ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ง ์์ผ๋ฉด ๋๋ฏ๋ก ์๋ก ์ธ์ ํด์๋ ๋ฐฐ์ถ๋ค์ด ๋ช ๊ตฐ๋ฐ์ ํผ์ ธ์๋์ง ์กฐ์ฌํ๋ฉด ์ด ๋ช ๋ง๋ฆฌ์ ์ง๋ ์ด๊ฐ ํ์ํ์ง ์ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ฐฐ์ถ๋ฐญ์ด ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด ์ต์ 5๋ง๋ฆฌ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ์ํ๋ค.
(0์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์์ง ์์ ๋ ์ด๊ณ , 1์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ๋ ์ ๋ํ๋ธ๋ค.)
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
์ ๋ ฅํ์
์ ๋ ฅ์ ์ฒซ ์ค์๋ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ ์ค๋ถํฐ ๊ฐ๊ฐ์ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ์ฒซ์งธ ์ค์๋ ๋ฐฐ์ถ๋ฅผ ์ฌ์ ๋ฐฐ์ถ๋ฐญ์ ๊ฐ๋ก๊ธธ์ด M(1 ≤ M ≤ 50)๊ณผ ์ธ๋ก๊ธธ์ด N(1 ≤ N ≤ 50), ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ์์น์ ๊ฐ์ K(1 ≤ K ≤ 2500)์ด ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ K์ค์๋ ๋ฐฐ์ถ์ ์์น X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅํ์
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ํ์ํ ์ต์์ ๋ฐฐ์ถํฐ์ง๋ ์ด ๋ง๋ฆฌ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
ํ์ด ๊ณผ์
BFS ๋ฌธ์ ๋ฅผ ๊ณ์ ํ๋ค๋ณด๋ ํธ๋ ๋ฐฉ๋ฒ์ด ๋งค์ฐ ๋น์ทํ๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
์๋ ๋จ์ง๋ฒํธ ๋ถ์ด๊ธฐ์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ฒ ๋์๋ค. ์ํ์ข์ฐ๋ฅผ ๊ฒ์ฌํ์ฌ ๊ฐ์ ๊ฐ์ด ์กด์ฌํ๋ฉด queue์ ๋ฃ์ด ๋ชจ๋ ๊ฒ์ฌํ๋๋ก ๊ตฌํํ๋ค 1์ return ํด์ฃผ์๋ค.
import sys
from collections import deque
def bfs(x, y):
dxy = [(0, 1), (-1, 0), (0, -1), (1, 0)]
queue = deque([(x, y)])
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 < m 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
return 1
number = int(input())
for _ in range(number):
m, n, k = map(int, sys.stdin.readline().split())
maps = [[0 for _ in range(n)] for _ in range(m)]
check = [[0 for _ in range(n)] for _ in range(m)]
answer = 0
for _ in range(k):
i, j = map(int,sys.stdin.readline().split())
maps[i][j] = 1
for i in range(m):
for j in range(n):
if maps[i][j] != 0:
if check[i][j] != 1:
answer += bfs(i, j)
print(answer)
'๐ Algorithm > ๐ช๐ป Python ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python - ๋ฐฑ์ค 2178] ๋ฏธ๋ก ํ์ (0) | 2021.01.12 |
---|---|
[Python - ๋ฐฑ์ค 2667] ๋จ์ง๋ฒํธ ๋ถ์ด๊ธฐ (0) | 2021.01.12 |
[Python - ๋ฐฑ์ค 2606] ๋ฐ์ด๋ฌ์ค (0) | 2021.01.12 |