문제
두 집합(듣지 못함/보지 못함)의 교집합을 출력하시오
풀이
이 문제는 굉장히 심플한 문제다. 푸는 것 자체는 그런데 출력이 씁…
import sys
N, M = map(int, sys.stdin.readline().split())
not_heard = set() #듣지 못한 사람
not_saw = set() # 보지 못한 사람
for _ in range(N):
not_heard.add(sys.stdin.readline().rstrip())
for _ in range(M):
not_saw.add(sys.stdin.readline().rstrip())
일단 집합(set)을 두 개 만들건데, 첫번째는 듣지 못한 사람이고 두번째는 보지 못한 사람이다. 아니 입력 순서가 듣-보임. 아무튼, 빈 집합을 만들고 입력 받자마자 추가하게 해 준다. 혹시나 중복되더라도 set 자료형은 알아서 중복 걸러주니까 걱정 ㄴㄴ.
not_heard_saw = not_heard & not_saw
not_heard_saw = list(not_heard_saw)
not_heard_saw.sort()
print(len(not_heard_saw))
for i in not_heard_saw:
print(i)
다음은 출력인데… 일단 아래 세 줄은 길이와 요소를 출력하는거니까 설명은 생략한다. 솔직히 이거 풀 짬이면 다들 알잖아요 뭔지…
위의 세 줄은 순서대로 1) 교집합을 구하고 2) 그걸 리스트로 바꿔서 3) 정렬하는 코드이다. 출력 사전순이니까 정렬해야지.
import sys
N, M = map(int, sys.stdin.readline().split())
not_heard = set() #듣지 못한 사람
not_saw = set() # 보지 못한 사람
for _ in range(N):
not_heard.add(sys.stdin.readline().rstrip())
for _ in range(M):
not_saw.add(sys.stdin.readline().rstrip())
not_heard_saw = not_heard & not_saw
not_heard_saw = list(not_heard_saw)
not_heard_saw.sort()
print(len(not_heard_saw))
for i in not_heard_saw:
print(i)
그래서 놀랍게도 이걸로 한방에 맞췄다.
Reply