- 문제
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
이 글을 참고하면 더 이해하기 쉬우니 확인하기.
'백준 알고리즘' 카테고리의 다른 글
[python] 백준 2164. 카드2 (0) | 2024.11.10 |
---|---|
[python] 백준 1620. 나는야 포켓몬 마스터 이다솜 (2) | 2024.11.09 |
[python] 백준 17219. 비밀번호 찾기 (0) | 2024.11.08 |
[python] 백준 11047. 동전 0 (4) | 2024.11.07 |
[python] 백준 11723. 집합 (0) | 2024.11.06 |