Algorithm/백준

[백준/Python] 결혼식

poppy 2021. 11. 12. 11:57
반응형

https://www.acmicpc.net/problem/5567

 

5567번: 결혼식

예제 1의 경우 2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2, 3, 4 3명의 친구를 결혼식에 초대

www.acmicpc.net

n = int(input())
m = int(input())
graph = [[] for _ in range(n+1)]
visited = [0] * (n+1) # 방문 확인 및 관계 구분 리스트

# 친구 관계 입력받기
for _ in range(m):
	a, b = map(int, input().split())
	graph[a].append(b)
	graph[b].append(a)

# BFS 수행 메서드
def bfs(start):
	queue = [start]
	visited[start] = 1

	while queue:
		v = queue.pop(0)
		for i in graph[v]: # 현재 노드의 인접 노드 확인
			if not visited[i]:
				queue.append(i)
				visited[i] = visited[v] + 1 # 상근이와의 관계 구분을 위해 +1

	return visited.count(2) + visited.count(3) # 1: 본인, 2: 친구, 3: 친구의 친구 

print(bfs(1))

1. graph 와 visited 를 생성하고 친구 관계를 입력받는다.

2. BFS를 수행한다.

    2-1. 시작 노드를 큐에 담고 시작 노드를 방문 처리 해준다. 시작 노드는 본인이므로 값을 1로 해준다.

    2-2. 큐에 값이 없을 때까지 다음 과정을 반복한다.

    2-3. 큐에서 pop 하여 현재 노드를 가져온 후 현재 노드의 인접 노드를 확인한다.

    2-4. 인접 노드를 아직 방문하지 않았다면 큐에 추가하고 방문 처리를 해준다. 이 때 상근이와의 관계 구분을 위해 현재 노드의 방문값에 +1 해준다.

    2-5. 큐에 값이 없으면 반복문을 빠져나와 결과값을 리턴한다. 친구와 친구의 친구까지만 초대할  수 있으므로 visited에서 2와 3의 개수를 리턴한다.

3. 결과값을 출력한다.

반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준/Python] 단지번호붙이기  (0) 2021.11.15
[백준/Python] 탑  (0) 2021.11.13
[백준/Python] 1로 만들기  (0) 2021.11.10
[백준/Python] 포도주 시식  (0) 2021.11.07
[백준/Python] 회전하는 큐  (0) 2021.11.03