본문 바로가기
알고리즘/백준

백준 실버4 1764. 듣보잡 (python)

by 개발하는 호랑이 2024. 3. 2.

듣보잡

풀이

문제를 보고 바로 작성해서 아래처럼 풀었다.

듣지 못해본 사람
보지 못해본 사람

의 명단을 받아서 중복되는 사람인 듣도보도못한사람을 사전순으로 출력하는 것이다.

따라서 각 입력받고 순서대로 중복되는지 확인하는 방법을 사용했다.

그러나 시간 초과가 발생했다.

import sys

N, M = map(int, sys.stdin.readline().split())
unknown_heard = []
unknown_look = []
for _ in range(N):
    unknown_heard.append(sys.stdin.readline().strip())
for _ in range(M):
    unknown_look.append(sys.stdin.readline().strip())

unknown_look_heard = []
for i in range(N):
    if unknown_heard[i] in unknown_look:
        unknown_look_heard.append(unknown_heard[i])
unknown_look_heard.sort()
print(len(unknown_look_heard))
for i in range(len(unknown_look_heard)):
    print(unknown_look_heard[i])

시간 초과의 발생으로 인해 어떤 방법이 있나 했는데, 바로 set을 사용해버리는 방법이 있었다.
애초에 각각에서 중복되는 이름은 없었으니, set으로 받아두고, 그 set을 이용해서 듣지 못해본 사람과 보지 못해본 사람 명단 중 중복되는 인원을 ㅃ보아내는 것이다. 이것을

unknown_look_heard = list(unknown_heard & unknown_look)

위의 코드로 나타내주었다.
그러니 해결되었다.

전체코드는 아래 코드와 같다.

import sys

N, M = map(int, sys.stdin.readline().split())
unknown_heard = set()
unknown_look = set()
for _ in range(N):
    unknown_heard.add(sys.stdin.readline().strip())
for _ in range(M):
    unknown_look.add(sys.stdin.readline().strip())

unknown_look_heard = list(unknown_heard & unknown_look)
unknown_look_heard.sort()
print(len(unknown_look_heard))
for name in unknown_look_heard:
    print(name)