[파이썬] 백준 5567 : 결혼식 (실버2)
5567번: 결혼식
예제 1의 경우 2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2, 3, 4 3명의 친구를 결혼식에 초대
www.acmicpc.net
문제
풀이
0. 방향성 생각
기준 노드인 1번 노드로부터 거리가 2 이하인 노드의 개수가 정답이다.
visit을 통해 몇 번째로 방문했는지 업데이트 해주고 정답을 얻는다.
1. 입력
from collections import deque
import sys
input = sys.stdin.readline
n = int(input())
graph = [[] for _ in range(n+1)]
visit = [-1]*(n+1)
for _ in range(int(input())):
a,b = map(int,input().split())
graph[a].append(b)
graph[b].append(a)
무방향 그래프이므로 양쪽 둘다 그래프에 추가해준다.
또한 1번 노드부터 시작이므로 더미 노드인 0번을 만들기 위해 n+1 길이를 가지게 한다.
2. 출력
q = deque()
q.append(1)
visit[1] = 0
while q:
x = q.popleft()
for nx in graph[x]:
if visit[nx] == -1:
visit[nx] = visit[x]+1
q.append(nx)
answer = [i for i in visit if i>0 and i<3]
print(len(answer))
큐에 1번 노드를 넣고 탐색을 시작한다.
연결된 노드가 방문처리가 되어있지 않으면 거리 +1을 해주고 큐에 넣는다.
visit 중 거리가 1 2인 노드만 얻는다.
전체코드
from collections import deque
import sys
input = sys.stdin.readline
n = int(input())
graph = [[] for _ in range(n+1)]
visit = [-1]*(n+1)
for _ in range(int(input())):
a,b = map(int,input().split())
graph[a].append(b)
graph[b].append(a)
q = deque()
q.append(1)
visit[1] = 0
while q:
x = q.popleft()
for nx in graph[x]:
if visit[nx] == -1:
visit[nx] = visit[x]+1
q.append(nx)
answer = [i for i in visit if i>0 and i<3]
print(len(answer))
'Algorithm > Graph' 카테고리의 다른 글
[파이썬] 백준 14502 : 연구소 (골드4) (0) | 2023.07.11 |
---|---|
[파이썬] 프로그래머스 : 미로탈출 (Lv.2) (0) | 2023.07.07 |
[파이썬] 프로그래머스 : 광물캐기 (Lv.2) (0) | 2023.07.07 |
[파이썬] 백준 1765 : 닭싸움 팀 정하기 (골드2) (0) | 2023.07.05 |
[파이썬] 프로그래머스 : 섬 연결하기 (Lv.3) (0) | 2023.07.05 |
[파이썬] 백준 9694 : 무엇을 아느냐가 아니라 누구를 아느냐가 문제다 (골드3) (0) | 2023.07.03 |
[파이썬] 백준 1647 : 도시 분할 계획 (골드4) (0) | 2023.06.30 |
댓글