728x90
https://www.acmicpc.net/problem/1764
| 2 초 | 256 MB | 108306 | 46614 | 36312 | 41.279% |
문제
김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.
듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.
출력
듣보잡의 수와 그 명단을 사전순으로 출력한다.

제출 코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
nolook_nolisten = []
no_look = set()
for i in range(N):
no_look.add(input())
for i in range(M):
no_listen = input()
if no_listen in no_look:
nolook_nolisten.append(no_listen)
no_look.remove(no_listen)
nolook_nolisten.sort()
print(len(nolook_nolisten))
for people in nolook_nolisten:
print(people.rstrip())
확인한 리스트를 삭제하는 방식의 풀이법
시간복잡도를 고려해야하는 문제이기 때문에 set과 remove를 써서 시간복잡도 O(1) 안에서 해결하고자 했다.
(선생님의 도움을 받았다..!)
'알고리즘 > 백준' 카테고리의 다른 글
| [BOJ#14620] 꽃 길 (0) | 2024.05.05 |
|---|---|
| [BOJ#21921] 블로그 (1) | 2024.05.01 |
| [BOJ#24553] 팰린드롬 게임 (0) | 2024.04.30 |
| [BOJ#17484] 진우의 달 여행 - small (0) | 2024.04.30 |
| [BOJ#1303] 전쟁 - 전투 (0) | 2024.04.28 |