위와같은 학생간의 키를 비교한 결과가 주어질 때, 자신의 키가 몇 번째인지 알 수 있는 학생들이 모두 몇 명인지 계산하여 출력하는 프로그램을 작성하시오.
자신의 키가 몇 번째인지 정확히 알기 위해서는, 총 인원 중 자기를 뺀 나머지 학생들이 더 큰지, 작은지 알 수 있어야 합니다.
즉, 자신과 타 학생간의 비교 횟수가 총 학생 수에서 자신을 뺀 n-1개만큼 나오면 정확한 순서를 알 수 있다는 뜻입니다.
자신보다 더 큰 아이들을 big, 작은 아이들을 small에 저장하여 마지막에 big과 small의 합이 n-1일 경우 count에 1을 더해 최종 결과를 출력합니다.
import sys
n, m = map(int, sys.stdin.readline().split())
count = 0
# set을 사용해 중복 수를 막아줍니다.
big = [set() for _ in range(n + 1)]
small = [set() for _ in range(n + 1)]
for _ in range(m): #b가 a보다 크므로, a 보다 큰 b를 big[a]에, b보다 작은 a를 small[b]에 넣습니다.
a, b = map(int, sys.stdin.readline().split())
big[a].add(b)
small[b].add(a)
#i보다 작다면, i보다 큰 학생들을 추가하고, i보다 크다면, i보다 작은 수들을 추가해줍니다.
for i in range(1, n+1):
for j in big[i]:
small[j].update(small[i])
for j in small[i]:
big[j].update(big[i])
for i in range(1, n+1): #자신보다 더 크고 작은 학생들의 합이 n-1이면 정확한 순위를 알 수 있습니다.
if len(big[i]) + len(small[i]) == n-1:
count += 1
print(count)