img.gif

그림의 μΆœμ²˜λŠ” μ•„λž˜ λΈ”λ‘œκ·Έ κΈ€μž…λ‹ˆλ‹€. λ§Žμ€ 도움을 λ°›μ•˜μŠ΅λ‹ˆλ‹€.

[λ°±μ€€] 2606 λ°”μ΄λŸ¬μŠ€ - Python (κ·Έλž˜ν”„ 탐색)

Untitled

μ—¬λŸ¬ 번 λ‹€μ–‘ν•œ 쒋은 글듀을 글을 읽고도 κ΅¬ν˜„μ„ λͺ»ν•˜λ‹€κ°€ 이제 μ‰¬μš΄ 문제λ₯Ό 겨우 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

μ–΄κΉ¨ λ„ˆλ¨Έλ‘œ κ΅¬ν˜„ν•˜μ‹œλŠ” 것을 많이 보고 이야기λ₯Ό μ£Όμ›Œ λ“£λ‹€ λ³΄λ‹ˆ-

κ·Έλž˜ν”„μ™€ 트리 문제 κ΅¬ν˜„ μ—°μŠ΅μ„ 많이 ν•΄ λ³΄λ €κ΅¬μš”.

μœ„ νŽ˜μ΄μ§€μ— μžˆμ—ˆλ˜ κΉŠμ΄μš°μ„ κ³Ό λ„ˆλΉ„μš°μ„  λͺ¨λ‘λ‘œ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

이래 λΈ”λ‘œκ·Έ 글을 읽고 혼자 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•΄ 보고 λΉ„κ΅ν•˜λ©΄μ„œ μˆ˜μ •ν–ˆμ–΄μš”.

λ¨Όμ € DFSμž…λ‹ˆλ‹€.

import sys

def dfs(v):
    visited[v]=1
    for nx in graph[v]:
        if visited[nx]==0:
            dfs(nx)

raw=list(map(str.rstrip,sys.stdin.readlines()))
n = int(raw[0]) #computers
v = int(raw[1]) #connections
graph = [[] for _ in range(n+1)]
visited = [0]*(n+1)
for line in raw[2:]:
    a,b = map(int,line.split())
    graph[a].append(b)
    graph[b].append(a)

dfs(1)
print(sum(visited)-1)

그리고 BFSμž…λ‹ˆλ‹€. 2차원 ν† λ§ˆν†  λ•Œλ³΄λ‹€ κ΅¬ν˜„μ΄ μ–΄λ ΅κ²Œ λŠκ»΄μ‘Œμ–΄μš”.

import sys
from collections import deque

def bfs(v):
    visited[v]=1
    queue = deque([1])
    while queue:
        curr=queue.popleft()
        for nx in graph[curr]:
            if visited[nx]==0:
                queue.append(nx)
                visited[nx]=1

raw=list(map(str.rstrip,sys.stdin.readlines()))
n = int(raw[0]) #computers
v = int(raw[1]) #connections
graph = [[] for _ in range(n+1)]
visited = [0]*(n+1)
for line in raw[2:]:
    a,b = map(int,line.split())
    graph[a].append(b)
    graph[b].append(a)

bfs(1)
print(sum(visited)-1)

λΉ„μŠ·ν•œ 문제라고 λŠκ»΄μ„œ 이런 λ¬Έμ œλ„ ν’€μ—ˆμ–΄μš”.

defaultdict(bool) μ΄λΌλŠ” μœ μš©ν•œ 도ꡬ도 μ•Œκ²Œ λ˜μ—ˆμ–΄μš”!

Untitled

from sys import stdin
from collections import defaultdict

raw = [tuple(x.split()) for x in list(map(str.rstrip, stdin.readlines()[1:]))]

dance = defaultdict(bool)
dance['ChongChong'] = True
answer = 1 

while raw: #총총이 λ“±μž₯ μ „κΉŒμ§€λŠ” λ‚ λ €μ€λ‹ˆλ‹€.
    a,b = raw[0]
    if a=='ChongChong' or b=='ChongChong':
        break
    else:
        raw.pop(0)
 
for a,b in raw:#λ“±μž₯ ν›„ 데이터 기반으둜 νƒμƒ‰ν•©λ‹ˆλ‹€.
    if dance[a]:
        if not dance[b]:
            dance[b] = True 
            answer += 1 
    elif dance[b]:
        dance[a] = True 
        answer += 1 
print(answer)

그런데 이 λ¬Έμ œλŠ” 트리라고 ν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ κ·Έλž˜ν”„μ™€ 트리의 차이점을 μ•Œμ•„λ΄€μŠ΅λ‹ˆλ‹€.(λ“€μ—ˆλŠ”λ° 잘 기얡이 μ•ˆ λ‚˜μ„œβ€¦.)