๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

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

๋ฟŒ์•ผ._. 2021. 9. 13. 17:21

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊นŠ์ด/๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(DFS/BFS)


<๋„คํŠธ์›Œํฌ>

๋ฌธ์ œ ์„ค๋ช…

 

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

 

๋ฌธ์ œ ํ’€์ด

  - my solution

def visit(i, computers, visited):
    visited[i] = True  # ๋ฐฉ๋ฌธ
    for j in range(len(computers)):
        if computers[i][j] == 1 and visited[j] == False:  # ์—ฐ๊ฒฐ ๋˜์–ด์žˆ์œผ๋ฉฐ ๋ฐฉ๋ฌธํ•œ ์ ์ธ ์—†๋‹ค๋ฉด
            visit(j, computers, visited)

def solution(n, computers):
    answer = 0
    visited = [False for i in range(n)]  # ์ดˆ๊ธฐํ™”
    for i in range(n):
        if visited[i] == False:  # ์•„์ง ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋‹ค๋ฉด
            visit(i, computers, visited)  # ๋ฐฉ๋ฌธ
            answer += 1  # ๋„คํŠธ์›Œํฌ
    return answer

 

๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๊ฑด๋“œ๋ฆฌ์ง€๋„ ๋ชปํ•œ ๋ฌธ์ œ์ด๋‹ค. 

๊นŠ์ด/๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๋ž€ ๋ง์—์„œ๋ถ€ํ„ฐ ๊ฒ์„ 1์ฐจ๋กœ ๋จน์—ˆ์œผ๋ฉฐ, ์ž์‹ ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ฒฐ๊ตญ ๋‚œ ์‹œ๋„์กฐ์ฐจ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๊ฒ€์ƒ‰์— ๋“ค์–ด๊ฐ”๋‹ค.

ํ•ญ์ƒ dfs, bfs์˜ ์ •์˜๋ฅผ ๋ด๋„ ๋ฌธ์ œ์— ์ ์šฉํ•˜๊ธฐ๋„ ์–ด๋ ค์› ๋‹ค.

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉฐ ์กฐ๊ธˆ์”ฉ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ ๋ฐฉํ–ฅ๊ณผ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ 

๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

 

1) visited list_False๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ†ตํ•ด ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ check

2) ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ check

   2-1) ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋‹ค๋ฉด dfsํ•จ์ˆ˜๋กœ ์ด๋™

   2-2) ๋„คํŠธ์›Œํฌ ๊ฐœ์ˆ˜ +1

3) visit ํ•จ์ˆ˜

   ๋งค๊ฐœ๋ณ€์ˆ˜) ํ˜„์žฌ ๋ฐฉ๋ฌธ ๋…ธ๋“œ, ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ •๋ณด, ๋ฐฉ๋ฌธ check list

   3-1) ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฏ€๋กœ True๋กœ ๋ณ€ํ™˜

   3-2) ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ์œผ๋ฉฐ, ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋‹ค๋ฉด visit ํ•จ์ˆ˜ ํ˜ธ์ถœ 


์ƒ๊ฐ๐Ÿค”

 

๋งค๋ฒˆ ํ’€๊นŒ ๋ง๊นŒ ํ•˜๋‹ค๊ฐ€ ์šธ๋ฉฐ ์‹œ์ž‘ํ•œ ๋ฌธ์ œ์ด๋‹ค.

๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ดค์ง€๋งŒ ๋น„์Šทํ•œ ๊ฒƒ๋„ ์žˆ๊ณ  ๋‹ค๋ฅธ ๊ฒƒ๋„ ์žˆ์—ˆ๋‹ค.

์™œ ๊ฐ™์€ dfs์ธ๋ฐ ๋‹ค๋ฅผ๊นŒ ๋ผ๋Š” ์ƒ๊ฐ์ด ์•„์ง๋„ ๋“ ๋‹ค.

 

์ด์œ ๋„ ๋ชจ๋ฅด๋Š” ๊ฒƒ์€ ์•„์ง ๋‚ด๊ฐ€ dfs๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹๊นŒ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค

์กฐ๋งŒ๊ฐ„ dfs, bfs๋ฅผ ๊ณต๋ถ€ํ•ด์„œ ์™„์ „ํ•œ ๋‚ด ํž˜์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ํ’€์–ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

๊ณง dfs, bfs ์™„์ „ ์ •๋ณตํ•˜๊ธฐ๋ฅผ ๐Ÿคจ


 

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต, https://programmers.co.kr/learn/challenges