๐Ÿ“’  ๋ฌธ์ œ ์ •๋ณด

 

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

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

์ž…์ถœ๋ ฅ ์˜ˆ

n computers return
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๊ฐœ์˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ”‘  ๋ฌธ์ œ ํ’€์ด

๋ฐฉ๋ฒ• 1. DFS ํ™œ์šฉ

DFS๋ฅผ ํ™œ์šฉํ•œ ํ’€์ด์ด๋‹ค.

  • ํ•œ ํ–‰์ด ํ•œ ์ปดํ“จํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ ํ–‰์„ ์ธ๋ฑ์Šค๋กœ visited ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.
  • dfs๋ฅผ ํ†ตํ•ด, ํ•œ ํ–‰์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์ปดํ“จํ„ฐ๋“ค์„ ๋ชจ๋‘ ํ™•์ธํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
    • (ํ•œ ํ–‰์—๋งŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์–ด๋„ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ์— ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์—)
def solution(n, computers):
    answer = 0
    visited = [False for i in range(n)]
    for com in range(n):
        if visited[com] == False:
            dfs(computers, com, visited)
            answer += 1
    return answer


def dfs(computers, com, visited):
    visited[com] = True
    for connected in range(len(computers)):
        if connected != com and computers[com][connected] == 1:
            if visited[connected] == False:
                dfs(computers, connected, visited)

 

 

 

๐Ÿ’ก  What I learned

๋‚ด๊ฐ€ ์ต์ˆ™ํ•œ ํ’€์ด๋Š” ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃจ์—ˆ๋˜ ์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค ๋จน๊ธฐ ๋ฌธ์ œ์ฒ˜๋Ÿผ ํ•œ ์ •์ ์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์ธ์ ‘๋…ธ๋“œ๋“ค์— ๋Œ€ํ•œ ๋ญ‰ํƒฑ์ด๋งŒ! ์ฐพ๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ์˜ ํŠน์ด์ ์€ ์ธ์ ‘๋…ธ๋“œ๊ฐ€ ์—†๋Š” ํ•œ ์ •์ ๋„ cnt += 1 ํ•ด์ฃผ์–ด์•ผ ํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค.

BFS, DFS์—๋„ ์ผ์ •ํ•œ ํŒจํ„ด์ด ์žˆ์ง€๋งŒ, ๊ฒฐ๊ตญ ๊ฐ ๋ฌธ์ œ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์ ์šฉํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ ์ด๋Š” ํ›ˆ๋ จ์ด ๋งŽ์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.

BELATED ARTICLES

more