[알고리즘] 5567 결혼식

DongGyu Jung·2022년 4월 2일
0
post-thumbnail

게시물을 작성하면서 복습하는 문제를 선정하는 기준은<solved.ac 티어 실버 2 (Silver 2) 이상>입니다.

※ 본 사진과 해당 게시글 내용의 문제 모두 백준 : 온라인 저지[Baekjoon_OnlineJudge]사이트에서 발췌해왔습니다.

❓ 문제

백준 온라인 저지 (Baekjoon Online Judge) :5567 결혼식


❗ 풀이

My Code

메모리 : 33420KB
시간 : 100ms

BFS그래프 탐색을 활용해 풀었다.
친구관계가 양방성이기 때문에
친구관계 graph에 양쪽 서로 추가시켜주고

상근이부터 시작하기 때문에
학번 1과 관계 깊이를 큐에 넣고 시작한다.

한 번 초대한 친구를 중복해서 초대하면 안되기 때문에
visited로 체크를 해주고

친구의 친구를 탐색하기 위해
for을 활용하고

조건 또한
친구의 친구까지만 초대하는 것이기 때문에
관계 깊이(depth)가 2보다 크게 될 경우엔 스킵하도록 한다.

import sys
input = sys.stdin.readline
N = int(input())
R = int(input())

graph = [[] for _ in range(N+1)]
visited = [0]*(N+1)
for _ in range(R):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

from collections import deque
def find_friend() :
    q = deque()
    q.append([1,0])
    visited[1] = 1
    cnt = -1
    while q:
        now, depth = q.popleft()
        if depth > 2:
            continue
        cnt += 1
        for f in graph[now] :
            if graph[f] and visited[f]==0 :
                q.append([f, depth+1])
                visited[f] = 1
    return cnt
print(find_friend())

0개의 댓글