πŸ’»μ½”λ”©ν…ŒμŠ€νŠΈ λ¬Έμ œν’€μ΄17

μ§€λ―Όμ„œΒ·2023λ…„ 3μ›” 14일
0

coding test

λͺ©λ‘ 보기
16/30

Chapter11. 자주 λ“±μž₯ν•˜λŠ” 자료 ꡬ쑰

[문제45] κ°€μž₯ λ¨Ό λ…Έλ“œ - Level3

n개의 λ…Έλ“œκ°€ μžˆλŠ” κ·Έλž˜ν”„κ°€ μžˆμŠ΅λ‹ˆλ‹€. 각 λ…Έλ“œλŠ” 1λΆ€ν„° nκΉŒμ§€ λ²ˆν˜Έκ°€ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€. 1번 λ…Έλ“œμ—μ„œ κ°€μž₯ 멀리 떨어진 λ…Έλ“œμ˜ 개수λ₯Ό κ΅¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€. κ°€μž₯ 멀리 떨어진 λ…Έλ“œλž€ μ΅œλ‹¨ 경둜둜 μ΄λ™ν–ˆμ„ λ•Œ κ°„μ„ μ˜ κ°œμˆ˜κ°€ κ°€μž₯ λ§Žμ€ λ…Έλ“œλ“€μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

λ…Έλ“œμ˜ 개수 n, 간선에 λŒ€ν•œ 정보가 λ‹΄κΈ΄ 2차원 λ°°μ—΄ vertexκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 1번 λ…Έλ“œλ‘œλΆ€ν„° κ°€μž₯ 멀리 떨어진 λ…Έλ“œκ°€ λͺ‡ κ°œμΈμ§€λ₯Ό returnν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

[μ œν•œμ‚¬ν•­]

  • λ…Έλ“œμ˜ 개수 n은 2 이상 20,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • 간선은 μ–‘λ°©ν–₯이며 총 1개 이상 50,000개 μ΄ν•˜μ˜ 간선이 μžˆμŠ΅λ‹ˆλ‹€.
  • vertex λ°°μ—΄ 각 ν–‰ {a, b}λŠ” a번 λ…Έλ“œμ™€ b번 λ…Έλ“œ 사이에 간선이 μžˆλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

[μ½”λ“œμž‘μ„±]

1. κ·Έλž˜ν”„λ₯Ό λ§Œλ“€ λ°°μ—΄κ³Ό 각 λ…Έλ“œλ³„ λˆ„μ  상황을 기둝할 배열을 μƒμ„±ν•©λ‹ˆλ‹€.

def solution(n, edge):
	answer = 0
    route = [0] * (n+1)
    graph = [[] for i in range(n+1)]

2. λ…Έλ“œ 데이터λ₯Ό 기반으둜 κ·Έλž˜ν”„ λ§Œλ“€κΈ°

for e in edge:
	graph [e[0]].append(e[1])
    graph [e[1].append(e[0])

3. 탐색 μ€€λΉ„

from collections import deque

queue = deque()
queue.append(1)
route[1] = 1

4. BFS 탐색 μˆ˜ν–‰

while queue:
	now = queue.popleft()
    for g in graph[now]:
    	if route[g] == 0:
        	queue.append(g)
            route[g] = route[now] + 1

5. λ‚˜μ˜¨ λ…Έλ“œ 데이터 쀑 κ°€μž₯ λ¨Ό λ…Έλ“œμ˜ 개수 νŒŒμ•…

max_edge = max(route)

	for r in route:
    	if r == max_edge:
        	answer += 1

[μ „μ²΄μ½”λ“œ]

from collections import deque

def solution(n, edge):
	answer = 0
    route = [0]*(n+1)
    graph = [[] for i in range(n+1)]
    queue = deque()
    
    for e in edge:
    	graph[e[0]].append(e[1])
        graph[e[1]].append(e[0])
        
    queue.append(1)
    route[1] = 1
    
    while queue:
    	now = queue.popleft()
        for g in graph[now]:
        	if route[g] == 0:
            	queue.append(g)
                route[g] = route[now] + 1
                
    max_edge = max(route)
    
    for r in route:
    	if r == mox_edge:
        	answer += 1
            
    return answer
profile
πŸ’» + πŸŽ₯

0개의 λŒ“κΈ€