๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

[programmers] ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ

๋ฟŒ์•ผ._. 2022. 2. 3. 23:47

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ทธ๋ž˜ํ”„

 


<๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ>

๋ฌธ์ œ ์„ค๋ช…

 

n๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ๋Š” 1๋ถ€ํ„ฐ n๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ ํ˜€์žˆ์Šต๋‹ˆ๋‹ค. 1๋ฒˆ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ๋ž€ ์ตœ๋‹จ๊ฒฝ๋กœ๋กœ ์ด๋™ํ–ˆ์„ ๋•Œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋…ธ๋“œ๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n, ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด vertex๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, 1๋ฒˆ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

์ œํ•œ ์‚ฌํ•ญ

 

- ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n์€ 2 ์ด์ƒ 20,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
- ๊ฐ„์„ ์€ ์–‘๋ฐฉํ–ฅ์ด๋ฉฐ ์ด 1๊ฐœ ์ด์ƒ 50,000๊ฐœ ์ดํ•˜์˜ ๊ฐ„์„ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
- vertex ๋ฐฐ์—ด ๊ฐ ํ–‰ [a, b]๋Š” a๋ฒˆ ๋…ธ๋“œ์™€ b๋ฒˆ ๋…ธ๋“œ ์‚ฌ์ด์— ๊ฐ„์„ ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

  - my solution

def bfs(graph, start, depth):
    queue=[start]

    while queue:
        temp=queue.pop(0)
        for i in graph[temp]:
            if depth[i]==0 and i!=1: # ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ
                depth[i]=depth[temp]+1 #depth
                queue.append(i)         
    return depth
    
def solution(n, edge):
    answer = 0
    
    graph={}
    depth=[0]*(n+1)
    
    for i in range(n):
        graph[i+1]=[]
    
    for i in edge: #graph
        graph[i[0]].append(i[1])
        graph[i[1]].append(i[0])
        

    result=bfs(graph,1, depth)
    
    find=max(result) #๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ
    
    for value in result:
        if value==find:
            answer+=1
    
    return answer

 

์ฒ˜์Œ์—๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. 

 

โ“ ์™œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๊ฐ€?

๋” ์ด์ƒ ์‹œ๊ฐ„์„ ์ค„์ผ ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•„ ๊ฒ€์ƒ‰์˜ ํž˜์„ ๋นŒ๋ ธ๋‹ค. ์ด๊ฒƒ ๋•Œ๋ฌธ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ฒƒ์œผ๋กœ๋Š” ๋ฐฉ๋ฌธ์„ ํ™•์ธํ•˜๋Š” list์™€ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š” dict๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๊ฒƒ์„ list ํ•˜๋‚˜๋กœ ํ•ฉ์ณ ๊ตฌํ˜„ํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

 

  • bfs
    - queue: [๋…ธ๋“œ]
    - queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> queue์˜ ๋งจ ์•ž ๊ฐ’ ๋ฝ‘๊ธฐ -> ๊ทธ ๋…ธ๋“œ(x)์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ(y) ํƒ์ƒ‰ -> ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ(y)์˜ depth ๊ฐ’์ด 0์ด๊ณ  1์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋…ธ๋“œ์ด๋ฉด ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒƒ -> ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ(y)์˜ depth ๊ฐ’: ๋…ธ๋“œ(x)์˜ depth +1 -> queue์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ(y) ์ถ”๊ฐ€
  • main
    - graph: dict, ์–‘๋ฐฉํ–ฅ ์ถ”๊ฐ€
    - depth: list, n+1๊ฐœ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๋ฆฌ ํ‘œ์‹œ
    - result: bfs ํ˜ธ์ถœํ•˜์—ฌ ์–ป์€ depth ๊ฒฐ๊ณผ
    - find: 1๋ฒˆ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ
    - 1๋ฒˆ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต๋ฌธ

์ƒ๊ฐ๐Ÿค”

 

์ฒ˜์Œ์— ๊ตฌํ˜„ํ•œ ํ›„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ •๋ง ๋ง‰๋ง‰ํ–ˆ์—ˆ๋‹ค. 

์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ ๋” ์ด์ƒ ์‹œ๊ฐ„์„ ์ค„์ผ ๊ณณ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๋‚ด๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ list, dict๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ์ €์žฅ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜์˜€๋”๋‹ˆ ๋ฌธ์ œ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


 

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