문제 링크

문제 요약

사람 수, Contact 수(접촉 / 감염 수), 초기 감염자 번호가 주어집니다. 그리고 시간 순서대로 Contact 정보가 주어집니다.

예를 들어 1 2 가 주어지면 1번과 2번이 만났음을 의미합니다.

  • 만약 1번이 감염된 상태였다면 2번도 감염됩니다.
  • 만약 둘 다 비감염 상태라면, 아무 일도 일어나지 않습니다.

풀이

감염 여부를 Array / Dictionary 등으로 저장해두고, 순서대로 Contact를 처리하면 됩니다.

정답 코드

mii = lambda : [*map(int,inp().split())]
 
while 1:
	m, n, p = mii()
 
	if m == n == p == 0:
		break
 
	is_infected = [0] * (m + 1)
	is_infected[p] = 1
 
	for _ in range(n):
		a, b = mii()
		if is_infected[a] or is_infected[b]:
			is_infected[a] = is_infected[b] = 1
			
	print(sum(is_infected))

연관 페이지

참고 문헌 / 사이트