새벽까지

듣보잡 - 1764

 

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

문제 설명

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

입력

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

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

출력

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


🙋 문제 해석

이 문제는 두 개의 명단이 있을 때, 그 명단 안에 중복되는 이름이 있는지 찾는 문제입니다.

석주 윤주 민수 영수
석주 영수 제갈 현수

두 개의 테이블 중 , 석주 영수가 출력되면 됩니다.

 

하지만 완전탐색으로 찾게 되면, O(n^2)으로 시간 초과가 나는데요, 최대한  n에 가깝에 만드는게 포인트입니다.


🔑 Solution 🔑

n,m = map(int,input().split())
a=set()
b=set()
result =[]
for _ in range(n):
    a.add(input())
for _ in range(m):
    b.add(input())

for i in a :
    if i in b :
        result.append(i)
result.sort()
print(len(result))
for i in result :
    print(i)

in함수는 set함수를 사용하게 될때 해시테이블을 이용하므로 O(1)시간 복잡도를 가집니다.

 

in함수 list에서 시간복잡도는 o(n)

 

 

🚀 파이썬의 set 함수와 list 함수의 in 함수 사용 시 시간복잡도

⏱️ 파이썬의 set 함수와 list 함수의 in 함수 사용 시 시간복잡도 in 함수 사용 시 set 함수: 평균 O(1) dict 함수 : 평균 O(n) list 함수: 평균 O(n) set 함수는 내부적으로 해시 테이블을 사용하여 데이터

night-knight.tistory.com


🕐 시간 복잡도

sort함수를 사용하게 되어서O(n + m + k log k) 이 추가됩니다.

🙇

profile

새벽까지

@GoS

좋아요❤️ 구독👍🏻 감사합니다!