Python3/백준 알고리즘

2022.02.26 [백준] (python 파이썬) 듣보잡

ian's coding 2022. 2. 26. 00:42
728x90
반응형

 

https://www.acmicpc.net/problem/1764

 

1764번: 듣보잡

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

www.acmicpc.net

 


풀이

이 문제는 arr1, arr2에 모두 속하는 데이터를 뽑은 뒤 갯수를 출력하고, 사전순으로 데이터를 출력하면 된다.

처음 쉽게 생각하고 두개의 배열을 모두 리스트로 만들어 코드를 작성했지만 시간초과가 발생했다.....

그래서 시간 복잡도를 생각하던 중 set은 포함유무를 체크하는데 O(1)이라는 시간이 걸린다는 것이 생각났다!!

참고로 list는 포함유무를 체크하는데 O(N)이다...

그래서 두 배열을 set으로 만들고 for문을 돌려 arr1의 데이터가 arr2에 있으면 정답 배열에 담고 정렬한 후 출력했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
 
input=sys.stdin.readline
n,m=map(int, input().split())
arr1=set()
arr2=set()
ans=[]
for _ in range(n):
    arr1.add(input().rstrip())
for _ in range(m):
    arr2.add(input().rstrip())
 
for i in arr1:
    if i in arr2:
        ans.append(i)
 
ans.sort()
print(len(ans))
for i in ans:
    print(i)
cs

 

 

 

 

728x90
반응형