반응형
https://www.acmicpc.net/problem/1764
1764번: 듣보잡
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.
www.acmicpc.net
내 코드 (set 이용)
import sys
read = sys.stdin.readline
n, s = map(int, read().split())
l_lst = []
s_lst =[]
l_s ={}
s_s = {}
for i in range(n):
l_lst.append(read().strip())
for j in range(s):
s_lst.append(read().strip())
l_s = set(l_lst)
s_s = set(s_lst)
s= list(l_s&s_s)
s.sort()
print(len(s))
for i in s:
print(i)
다른 풀이 (윗 코드 정리.ver)
import sys
read = sys.stdin.readline
n, s = map(int, read().split())
l_s =set()
s_s = set()
for i in range(n):
l_s.add(read().strip())
for j in range(s):
s_s.add(read().strip())
s = sorted(list(l_s & s_s))
print(len(s))
for i in s:
print(i)
set 사용하기 & sort() vs sorted()
이중 for문을 돌려서 듣잡과 보잡의 교집합을 찾았더니 시간초과가 떴다.. 1년 전에도 시간 초과가 떴던 문제였다.
이번 문제를 풀면서는 많은 것들을 배우게 되었다.
set 도 자주 사용하지는 않는 라이브러리였는데, 이걸 쓰면서 또 한번 보게 되었다.
교집합과 차집합을 사용할 때는 set를 쓰자.
set 쓰니까 시간복잡도는 해결!
list를 set로 변경하기
s = {}
l = [1, 2]
s = set(l)
set를 list로 변경하기
l=[]
s={1, 2}
s = list(s)
set의 특성
- mutable한 객체
- list의 중복을 제거하려면 list(set(value)) 이렇게 사용하면 편하다!
- 순서가 없다
- 숫자인 경우에만 자동정렬이 일어난다
sort vs sorted
처음에 s= list(l_s&s_s).sort()
를 했는데 계속해서 오류가 떴다.
이유를 알고 보니 sort는 정렬을 한 후에 None 을 반환하는 함수다.
그래서 뒤에 sort를 붙이면 안 되고 밑에 sort를 한 번 더 써줘야 한다.
따로 정렬을 해야 한다!
- 리스트명.sort()
- sorted(리스트명)
반응형
'코딩테스트 대비 > 백준(BOJ)' 카테고리의 다른 글
| [Python][백준/BOJ] 1302번 : 베스트셀러 (0) | 2023.06.19 |
|---|---|
| [Python][백준/BOJ] 10825번 : 국영수 (0) | 2023.06.19 |
| [Python][백준/BOJ] 27866번 : 문자와 문자열 (0) | 2023.06.19 |
| [Python][백준/BOJ] 2563번 : 색종이 (0) | 2023.06.19 |
| [Python][백준/BOJ] 2566번 : 최댓값 (0) | 2023.06.19 |