현재 구슬보다 큰 구슬의 개수가 (n+1)//2 개 이상이거나,
작은 구슬의 개수가 (n+1)//2 개 이상이라면 그 구슬은 절대 중간값이 될 수 없다.
현재 구슬보다 큰 구슬에 대한 연결 그래프와 현재 구슬보다 작은 구슬에 대한 연결 그래프를 각각 만든다.
1번 구슬부터 n번째 구슬까지 각각 큰 연결 그래프 (1) 과 작은 연결 그래프 (2) 에 대해
BFS를 이용하여 탐색하면서 현재 노드가 (n+1)//2 개 보다 많은 연결 관계 를 가지고 있다면
정답 개수에 1을 더해준다. answer + 1
(구슬의 개수 + 1) // 2
을 넘어가면 그 구슬은 절대 중간에 있을 수 없다. import sys
from collections import deque
# n : 구슬의 개수 ( 1 <= n <= 99 )
# m : 저울에 올려 본 쌍의 개수 ( 1 <= m <= n(n-1)/2 )
n, m = map(int, sys.stdin.readline().split())
# 구슬 연결 정보
more = [ [] for _ in range(n + 1)]
less = [ [] for _ in range(n + 1)]
# 정답 배열 및 중간 위치 기준 변수 선언
answer = 0
mid = (n + 1) // 2
# 구슬 연결 정보 입력받아서 2개의 그래프에 각각 저장
for _ in range(m):
a, b = map(int, sys.stdin.readline().split())
more[a].append(b)
less[b].append(a)
# BFS
def bfs(data, x):
global count
# 탐색 시작 노드 방문처리 후 큐에 삽입
queue = deque([x])
visited[x] = True
while queue:
v = queue.popleft()
# 인접 노드 중에서 방문하지 않은 노드의 갯수를 세고 방문처리 후 큐에 삽입
for i in data[v]:
if not visited[i]:
visited[i] = True
queue.append(i)
count = count + 1
# 1번째 구슬부터 n번째 구슬까지 큰 연결 그래프(1)와 작은 연결 그래프를 탐색하여
# 연결된 노드의 개수를 구한다.
# 연결된 노드의 개수가 중간이 될 수 있는 기준 값인 (`(n+1)//2`) 보다 크다면
# 정답 변수(`answer`)에 +1 을 한다.
for i in range(1, n + 1):
visited = [False] * (n + 1)
count = 0
bfs(more, i)
if count >= mid:
answer += 1
count = 0
bfs(less, i)
if count >= mid:
answer += 1
print(answer)