[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋„คํŠธ์›Œํฌ / ํŒŒ์ด์ฌ / Python / DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜
Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋„คํŠธ์›Œํฌ / ํŒŒ์ด์ฌ / Python / DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿ’กsolutions )

๐Ÿ’ฌ DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜, stack ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ ํ•ด๊ฒฐํ•จ

๐Ÿ’ฌ computer ํ•œ๋Œ€์”ฉ visit ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด dfsํ•จ์ˆ˜๋ฅผ ๋Œ๋ฆฐ๋‹ค -> ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋“ค๊ณผ์˜ ์—ฐ๊ฒฐ์„ฑ์„ ํ™•์ธํ•˜์—ฌ ์—ฐ๊ฒฐ๋ผ ์žˆ์œผ๋ฉด stack ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๊ธฐ -> ์ด๋•Œ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  visit๋ฐฐ์—ด์— cnt๊ฐ’ ํ• ๋‹น

๐Ÿ’ฌ ํ•œ๋ฒˆ์˜ dfs ํƒ์ƒ‰์ด ๋๋‚œ ํ›„ cnt +=1 ๋กœ 1์”ฉ ๊ฐ’์„ ํ‚ค์›Œ์ฃผ๊ธฐ (์ „์ฒด ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ์ฐพ๊ธฐ ์œ„ํ•œ ์นด์šดํŠธ)

๐Ÿ’ฌ ์ด๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€, cnt = 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉด visit๋ฐฐ์—ด์—์„œ 0์œผ๋กœ ํ‘œํ˜„๋œ ๊ฒƒ๋“ค์ด ๊ณ„์† ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œ๋ฃจํ”„ ๋Œ๊ธฐ ๋•Œ๋ฌธ์— cnt = 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ์—์„œ -1ํ•œ ๊ฐ’์ด ์ •๋‹ต์ด ๋œ๋‹ค. 

๐Ÿ‘จ‍๐Ÿ’ปcode )

def dfs(visit,computers, i, cnt):
    stack = [i]
    while stack:
        a = stack.pop()
        for j in range(len(computers)):
            if computers[a][j] == 1 and not visit[j]:
                stack.append(j)
                visit[i] = cnt

    return visit


def solution(n, computers):
    visit = [0]*n
    cnt = 1
    for i in range(n):
        if not visit[i]:
            dfs(visit, computers, i, cnt)
            cnt += 1
    return cnt-1

 

 

๐Ÿ“Œdescription )

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋„คํŠธ์›Œํฌ

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

programmers.co.kr


๋ฌธ์ œ ์„ค๋ช…

๋„คํŠธ์›Œํฌ๋ž€ ์ปดํ“จํ„ฐ ์ƒํ˜ธ ๊ฐ„์— ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํ“จํ„ฐ 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์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

ncomputersreturn

3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 2
3 [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 1

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ #1
์•„๋ž˜์™€ ๊ฐ™์ด 2๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2
์•„๋ž˜์™€ ๊ฐ™์ด 1๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.




 

 

๋ฐ˜์‘ํ˜•