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


N번 사람을 1대1로 만나게 할건데 ,
사람1 사람2
이런 식으로 공백을 사이로 만나게 한다.
그런데 무지개 댄스를 추고 있는 ChongChong(chongchong과는 구별해야 함) 이라는 사람과 어떠한 사람을 만나게 되면 그 만난 사람도 무지개 댄스를 추게 한단다.
그렇다면 이 무지개 댄스를 추고 있는 사람들과 접촉하는 모든 사람들이 좀비 바이러스처럼 무지개 댄스가 퍼지게되는데 마지막에 무지개 댄스를 추고 있는 사람의 수를 출력하는 문제.
결국 무지개 인간을 만나면, 무지개가 되고. 마지막에 무지개 인간 수 출력하는 문제.
무지개인간을 저장하는 자료형 뭐로 하는게 좋을까?
-> 중복이 없는 set 자료형이 좋아보인다.
사람이 접촉하는 line을 따로 공백을 기준으로 분리하여 저장하고,
만약 저장된 요소중 set 자료형 요소가 있다면 모두 무지개 set에 넣는 형식으로 문제를 풀어보겠다.
import sys
N = int(sys.stdin.readline())
rainbow = {"ChongChong"}
# rainbow = set()
# rainbow.add("ChongChong")
contacts = set()
for _ in range(N):
line = sys.stdin.readline().strip().split()
contacts.update(line) # 여러개를 한번에 set자료형에 넣는 메소드
if contacts & rainbow:
#if contacts & ranbiow != set():
rainbow.update(contacts)
contacts.clear()
else:
contacts.clear()
print(len(rainbow))
set() 말고도 중괄호 '{}' 를 이용해서 set자료형은 선언할 수 있다.
rainbow = {"ChongChong"}
# rainbow = set()
# rainbow.add("ChongChong")
set자료형에 교집합을 활용하여 a&b:하면 a,b집합사이에 교집합이 하나라도 존재하면, 이라는 if문을 작성할 수 있다.
if contacts & rainbow:
#if contacts & ranbiow != set():