[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค-Lv3] ๋„คํŠธ์›Œํฌ / Python

๐Ÿ“š Problem Solving/Programmers

 

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

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

programmers.co.kr

import sys
from collections import deque

input = sys.stdin.readline

n = int(input())
compters = [list(map(int, input().split())) for _ in range(n)]


def bfs(n, computers, v, visited):
    queue = deque()
    queue.append(v)
    visited[v] = True

    while queue:
        x = queue.popleft()
        for i in range(len(computers[x])):
            if i == x:
                continue
            if visited[i] == False and computers[x][i] == 1:
                visited[i] = True
                queue.append(i)


def solution(n, computers):
    answer = 0
    visited = [False] * n

    for i in range(n):
        if visited[i] == False:
            bfs(n, computers, i, visited)
            answer += 1

    return answer


print(solution(n, compters))

 

ํ•ด์„ค

BFS๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ visited ๋ฆฌ์ŠคํŠธ๋ฅผ False๋กœ ์ดˆ๊ธฐํ™”ํ•ด ๋งŒ๋“ค์–ด์ค€๋‹ค.

visited์—์„œ False์ธ ๊ฐ’์˜ ์ธ๋ฑ์Šค๋Š” BFS๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ๋œ ๊ฒƒ์ด๋ฏ€๋กœ BFS๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ•ด๋‹น ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์ •์ ๋“ค์ด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๊ณ , ๋„คํŠธ์›Œํฌ๊ฐ€ ํ•˜๋‚˜ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.