๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค_๋„คํŠธ์›Œํฌ (DFS&BFS)

by ๋ญ…์ฆค 2022. 2. 6.
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

ํ’€์ด

๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ ๋Œ๋ฉด์„œ ๋ฐฉ๋ฌธ ์•ˆํ•œ ์œ„์น˜์— ๋ฐฉ๋ฌธํ•˜์—ฌ DFS๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋‹ค. 

ํ•˜๋‚˜์˜ DFS๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด +1 ํ•ด์„œ ๋„คํŠธ์›Œํฌ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , DFS ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชจ๋“  ์ปดํ“จํ„ฐ๋ฅผ for๋ฌธ์œผ๋กœ ํ™•์ธํ•˜๋ฉด์„œ ์ž๊ธฐ ์ž์‹ ์ด ์•„๋‹ˆ๊ณ  ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๋ฌธ์„ ์•ˆํ•œ ๊ฒฝ์šฐ์— DFS๋กœ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

์ฝ”๋“œ

def solution(n, computers):
    answer = 0
    visited = [False]*n # ์ปดํ“จํ„ฐ ๊ฐœ์ˆ˜ ๋งŒํผ
    for com in range(n): # ๊ฐ ์ปดํ“จํ„ฐ๋ฅผ ๋Œ๋ฉด์„œ ๋ฐฉ๋ฌธ ์•ˆํ–ˆ์œผ๋ฉด DFS
        if visited[com] == False :
            DFS(n, computers, com, visited)
            answer +=1 # ์—ฐ๊ฒฐ๋œ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ +1
    return answer
            
            
def DFS(n, computers, com, visited):
    visited[com] = True # ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    for connect in range(n): # ์ปดํ“จํ„ฐ ๊ฐœ์ˆ˜๋งŒํผ for๋ฌธ ๋Œ๋ฉด์„œ
        if connect != com and computers[com][connect] == 1: # ์ž๊ธฐ ์ž์‹ ์ด ์•„๋‹ˆ๊ณ  com๊ณผ connect๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ 
            if visited[connect] == False :  # ๋ฐฉ๋ฌธ ์•ˆํ–ˆ์œผ๋ฉด
                DFS(n, computers, connect, visited) # DFS
๋ฐ˜์‘ํ˜•