백준 알고리즘

[python] 백준 1764. 듣보잡

민121 2024. 11. 6. 17:12

- 문제

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

 

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.

출력

듣보잡의 수와 그 명단을 사전순으로 출력한다.


- 풀이

딱히 고의로 그런 건 아니었지만, 문제를 읽어보니 set을 또 써야하는 문제를 골랐다는 걸 알 수 있었다. 듣도 못한 사람 N과 보도 못한 사람 M을 set으로 집합에 넣어 교집합(s1 & s2)을 찾고 배열에 정렬한 채로 길이와 print만 해주면 해결될 문제 아닌가?

import sys

count = sys.stdin.readline().split()
n = int(count[0])
m = int(count[1])

s1 = set(sys.stdin.readline().strip() for _ in range(n))
s2 = set(sys.stdin.readline().strip() for _ in range(m))

result = sorted(s1 & s2) #배열에 정렬

print(len(result))
for name in result:
    print(name)

 

이 문제를 풀면서 새롭게 알게된 건 sorted 함수! 정렬 방법을 찾다가 알게 되었다. 

  https://blockdmask.tistory.com/466

이 글을 참고하면 더 이해하기 쉬우니 확인하기.