문제
https://www.acmicpc.net/problem/5567
풀이
분류는 구현으로 되어 있었는데, 그래프 탐색으로도 풀 수 있는 문제였다. 문제의 힌트가 중요한데, 친구의 친구까지만 결혼식에 초대가 가능하다는 점이다. 따라서 1번 노드(상근이)를 시작으로 너비 우선 탐색을 진행하면서 거리(dist)가 2 이하인 노드들만 개수를 세주면 된다.
코드
import sys
from collections import defaultdict, deque
def bfs(start):
cnt = 0
visited = [0 for _ in range(n+1)]
visited[start] = 1
queue = deque([[start, 0]])
while queue:
u, dist = queue.popleft()
if dist <= 2: # 친구의 친구(dist==2)까지 초대할 수 있다
cnt += 1
for v in g[u]:
if not visited[v]:
visited[v] = 1
queue.append([v, dist+1])
return cnt-1 # cnt에 자기 자신까지 포함되어 있으므로 1을 빼준다
n = int(sys.stdin.readline().strip())
m = int(sys.stdin.readline().strip())
g = defaultdict(list)
for _ in range(m):
a, b = map(int, sys.stdin.readline().split())
g[a].append(b)
g[b].append(a)
print(bfs(1))
'CS > 알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 1946 - 신입 사원 [Python(파이썬)] (0) | 2021.06.28 |
---|---|
[백준] 15686 - 치킨 배달 [Python(파이썬)] (0) | 2021.06.24 |
[백준] 1325 - 효율적인 해킹 [Python(파이썬)] (4) | 2021.06.22 |
[백준] 1759 - 암호 만들기 [Python(파이썬)] (0) | 2021.06.10 |
[백준] 1697 - 숨바꼭질 [Python(파이썬)] (0) | 2021.05.29 |