반응형
https://www.acmicpc.net/problem/5567
5567번: 결혼식
예제 1의 경우 2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2, 3, 4 3명의 친구를 결혼식에 초대
www.acmicpc.net
from collections import deque
n = int(input())
m = int(input())
graph = {i : [] for i in range(1, n+1)}
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
def dfs(v):
visited = {}
friends = set()
q = deque()
q.append((v, 0))
while q:
i, depth = q.popleft()
if depth <= 2:
friends.add(i)
nodes = graph[i]
visited[i]= True
for node in nodes:
if visited.get(node, False) == False:
visited[node] = True
q.append((node, depth+1))
return friends - {1}
friends=dfs(1)
print(len(friends))
dfs
를 이용하여 그래프의 깊이 depth
를 확인하며 문제를 해결하였습니다.
문제에서 요구한 상근이 자신의 친구와 친구의 친구까지 초대할 수 있기 때문에 가능한 depth
는 2
입니다.2
이상의 관계는 친구의 친구의 친구이기 때문에 문제의 요구사항에 맞지 않습니다.
dfs
코드를 확인해보면 q
에 노드 v
와 깊이 depth
를 각각 1
, 0
을 초기에 저장합니다.
v
가1
인 이유는 상근이 자신이1
이기 때문입니다.
각 노드와 인접한 노드들을 확인하며 이미 방문처리된 노드는 확인하지 않고 방문처리 되어 있지 않은 노드만 확인합니다.
다음 노드를 확인하기 위하여 q
에 저장할 때 depth + 1
하여 그래프의 깊이를 하나 증가시켜 저장합니다.
popleft()
로 노드를 추출할 때 깊이 depth
도 같이 추출하게 되는데 이때 depth
가 2보다 작거나 같다면
결혼식에 올 수 있는 조건에 부합하기 때문에 friends
에 저장합니다.
그래프 모두 확인했다면 friends
에서 자기자신 1
을 제거하여 반환합니다.
마지막으로 friends
의 길이를 반환하여 문제를 해결합니다.
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 미로 탈출 파이썬(Python) (0) | 2023.02.21 |
---|---|
[코딩테스트] 프로그래머스 카드 뭉치 파이썬(Python) (0) | 2023.02.20 |
[코딩테스트] 백준 유레카 이론 파이썬(python) (0) | 2023.02.17 |
[코딩테스트] 백준 A 와 B 2 파이썬(Python) (0) | 2023.02.16 |
[코딩테스트] 백준 소수인팰린드롬 파이썬(Python) (0) | 2023.02.15 |