[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/python] ๊นŠ์ด/๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(DFS/BFS) : ๋„คํŠธ์›Œํฌ

2021. 4. 7. 16:18

๋ฌธ์ œ ์„ค๋ช…

๋„คํŠธ์›Œํฌ๋ž€ ์ปดํ“จํ„ฐ ์ƒํ˜ธ ๊ฐ„์— ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ B๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ณ , ์ปดํ“จํ„ฐ B์™€ ์ปดํ“จํ„ฐ C๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ C๋„ ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํ“จํ„ฐ A, B, C๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์— ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜ n, ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด computers๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋„คํŠธ์›Œํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ œํ•œ์‚ฌํ•ญ

  • ์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜ n์€ 1 ์ด์ƒ 200 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์ปดํ“จํ„ฐ๋Š” 0๋ถ€ํ„ฐ n-1์ธ ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • i๋ฒˆ ์ปดํ“จํ„ฐ์™€ j๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด computers[i][j]๋ฅผ 1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • computer[i][i]๋Š” ํ•ญ์ƒ 1์ž…๋‹ˆ๋‹ค.

์ •๋‹ต

def solution(n, computers):
    answer = 0
    graph = {}
    for i in range(n):
        graph[i] = list(filter(lambda x: computers[i][x] == 1, range(n)))

    visited = []
    for i in range(n):
        if i not in visited:
            # DFS
            stack = [i]
            while stack:
                k = stack.pop()
                if k not in visited:
                    visited.append(k)
                    stack.extend(graph[k])

            answer += 1

    return answer

DFS๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด graph ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ๊ฐ ์–ด๋–ค ์ปดํ“จํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์ €์žฅํ•œ๋‹ค.

filter์™€ ๋žŒ๋‹คํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ์ด์ฐจ์›๋ฐฐ์—ด ๊ฐ’์ด 1์ธ ๋‘๋ฒˆ์งธ ์ธ๋ฑ์Šค๋“ค์„ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค.

 

๋ฐฉ๋ฌธํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ผ visited ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค i๊ฐ€ visited์— ์—†๋‹ค๋ฉด DFS๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

DFS๋ฅผ ํ•œ๋ฒˆ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋„คํŠธ์›Œํฌ๊ฐ€ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด๋ฏ€๋กœ answer์— 1์„ ๋”ํ•œ๋‹ค.

 

์•„๋ž˜ ํฌ์ŠคํŒ…์€ DFS์˜ ์ž์„ธํ•œ ์„ค๋ช…์ด๋‹ค.

2021.04.05 - [๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ”…๊ฐœ๋…์ •๋ฆฌ] - [ํŒŒ์ด์ฌ/python] DFS์™€ BFS

 

[ํŒŒ์ด์ฌ/python] DFS์™€ BFS

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS์™€ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ทธ๋ž˜ํ”„๋ž€ ์ •์  node์™€ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„  edge๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS DFS๋Š” Depth Fir

ye333.tistory.com

 

728x90

BELATED ARTICLES

more