풀이


상근이와의 거리가 2이하인 친구들의 인원수를 찾아내는 문제이다.

주어진 친구목록을 튜플로 리스트에 저장한다.

친구관계 x, y 는 y 가 항상 x 보다 크기에 상근이를 지칭하는 1 은 항상 x 에 위치한다.

때문에 상근이와 거리가 1인 친구들을 찾을 경우 x 가 1 인 y 들을 찾아주고 리스트 f 에 저장한다.

리스트 f 에 저장된 친구들을 기준으로 친구의 친구를 찾으면된다.

이때 친구의 친구가 상근이의 친구보다 학번이 작거나 클 수 있으니 x, y 에 대해서 모두 찾아주면된다.

이후 찾은 모든 친구들의 학번에서 중복되는 학번을 set 를 통해 걸러주고 상근이가 포함이 되어있을 경우 상근이를 제외한 인원수를 출력해주면된다.

소스코드


import sys
 
input = sys.stdin.readline
 
n = int(input())
m = int(input())
l = [list(map(int, input().split())) for _ in range(m)]
f = []
ff = []
 
for x, y in l:
    if x == 1:
        f.append(y)
 
for x, y in l:
    if x in f:
        ff.append(y)
    elif y in f:
        ff.append(x)
 
fff = list(set(f + ff))
if 1 in fff:
    fff.remove(1)
 
print(len(fff))

References