๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

[๋ฐฑ์ค€] [Python] Class3_1012๋ฒˆ_์œ ๊ธฐ๋† ๋ฐฐ์ถ”

Dbswnstjd 2022. 10. 26. 20:03

๋ฌธ์ œ

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

 

1012๋ฒˆ: ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

์ฐจ์„ธ๋Œ€ ์˜๋†์ธ ํ•œ๋‚˜๋Š” ๊ฐ•์›๋„ ๊ณ ๋žญ์ง€์—์„œ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋†์•ฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋ ค๋ฉด ๋ฐฐ์ถ”๋ฅผ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‚˜๋Š” ํ•ด์ถฉ ๋ฐฉ์ง€์— 

www.acmicpc.net

ํ’€์ด

BFS๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด

# ๋ฐฑ์ค€ 1012๋ฒˆ ๋ฌธ์ œ - ์œ ๊ธฐ๋† ๋ฐฐ์ถ”
t = int(input()) #ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜

dx = [0,0,-1,1] # ์ƒ, ํ•˜, ์ขŒ, ์šฐ
dy = [1,-1,0,0]

def BFS(x,y):           
    queue = [(x,y)]
    cabbage[x][y] = 0 # ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ

    while queue:
        x,y = queue.pop(0)

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

            if nx < 0 or nx >= m or ny < 0 or ny >= n:
                continue

            if cabbage[nx][ny] == 1 :
                queue.append((nx,ny))
                cabbage[nx][ny] = 0

# ํ–‰๋ ฌ๋งŒ๋“ค๊ธฐ
for i in range(t):
    m, n, k = map(int,input().split())
    cabbage = [[0]*(n) for _ in range(m)]
    cnt = 0

    for j in range(k):
        x,y = map(int, input().split())
        cabbage[x][y] = 1

    for a in range(m):
        for b in range(n):
            if cabbage[a][b] == 1:
                BFS(a,b)
                cnt += 1

    print(cnt)

 

 

DFS๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด

import sys 
sys.setrecursionlimit(10000) 

def dfs(x, y): 
	dx = [1, -1, 0, 0] 
	dy = [0, 0, 1, -1] 
    
    # ์ƒ,ํ•˜,์ขŒ,์šฐ ํ™•์ธ 
	for i in range(4): 
		nx = x + dx[i] 
        ny = y + dy[i] 
        
        if (0 <= nx < N) and (0 <= ny < M): 
        	if matrix[nx][ny] == 1: 
            	matrix[nx][ny] = -1 
                dfs(nx, ny)
               
T = int(input()) 
for _ in range(T): 
	M, N, K = map(int, input().split()) 
    matrix = [[0]*M for _ in range(N)] 
    cnt = 0 
    
    # ํ–‰๋ ฌ ์ƒ์„ฑ 
    for _ in range(K): 
    	m, n = map(int, input().split()) 
    	matrix[n][m] = 1 
        
    for i in range(N): # ํ–‰ (๋ฐ”๊นฅ ๋ฆฌ์ŠคํŠธ) 
    	for j in range(M): # ์—ด (๋‚ด๋ถ€ ๋ฆฌ์ŠคํŠธ) 
        	if matrix[i][j] > 0: 
            	dfs(i, j) 
                cnt += 1 
print(cnt)