알고리즘/백준

[BOJ#1764] 듣보잡

Jinoo.keem 2024. 4. 30. 22:34
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