Algorithm

[programmers] ๋„คํŠธ์›Œํฌ python

๐Ÿณ ๋งํฌ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋„คํŠธ์›Œํฌ

๐Ÿ• ๋ฌธ์ œ

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

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

๐Ÿพ ํ’€์ด ๋ฐฉ๋ฒ•

์ปดํ“จํ„ฐ์˜ ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
๋จผ์ €, ์ปดํ“จํ„ฐ์˜ ์ˆ˜ ๋งŒํผ visit์ด๋ผ๋Š” ๋ฐฉ๋ฌธ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
ํ•ด๋‹น ๋ฒˆํ˜ธ์˜ ์ปดํ“จํ„ฐ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด visit์„ 1๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.
dfs์—์„œ๋Š” ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ๋ฅผ st์— ๋„ฃ๊ณ , ๊ทธ ๋ฒˆํ˜ธ์— ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ๋ฅผ ๋‹ค์‹œ ๋˜ st์— ๋„ฃ๋Š”๋‹ค. ๋งŒ์•ฝ ์—†๋‹ค๋ฉด, st์ด empty๊ฐ€ ๋  ๊ฒƒ์ด๊ณ  dfs๋ฅผ ๋น ์ ธ๋‚˜์˜ค๋ฉด์„œ answer์„ 1 ์ฆ๊ฐ€ ์‹œํ‚จ๋‹ค. ์ฆ‰, ๋„คํŠธ์›Œํฌ์˜ ์ˆ˜๊ฐ€ 1 ์ฆ๊ฐ€ํ•œ๋‹ค.

๋ชจ๋“  ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์„ฑ๊ณต ์ฝ”๋“œ

def solution(n, computers):
    answer = 0
    visit = [0 for _ in range(n)]

    def dfs(start):
        st = [start]

        while st:
            com_num = st.pop()
            if visit[com_num] == 0:
                visit[com_num] = 1
            for i in range(len(computers[0])):
                if computers[com_num][i] == 1 and visit[i] == 0:
                    st.append(i)

    i = 0
    while 0 in visit:
        if visit[i] == 0:
            dfs(i)
            answer += 1
        i += 1
    return answer
}