728x90
반응형
집합을 사용한 방식
합집합을 사용하면 쉽게 풀 수 있다.
a, b = map(int, input().split())
s1, s2 = set(), set()
for _ in range(a):
s1.add(input())
for _ in range(b):
s2.add(input())
li = sorted(s1 & s2)
print(len(li))
for s in li:
print(s)
이분 탐색을 사용한 방식
1) 집합을 사용한 방식과 속도가 비슷하다. input함수를 사용해서 입력을 읽는 게 시간이 오래 걸리는 것 같다.
def binarySearch(li, n):
s, e = 0, len(li)-1
while s <= e:
m = (s + e) // 2
if li[m] == n:
return 1
if n > li[m]:
s = m + 1
else:
e = m - 1
return 0
a, b = map(int, input().split())
result = []
li1 = sorted([input() for _ in range(a)])
li2 = sorted([input() for _ in range(b)])
for s in li2:
if binarySearch(li1, s):
result.append(s)
print(len(result))
for c in sorted(result):
print(c)
2) stdin.readline을 사용해서 해결했다. 이 방법이 훨씬 빠르다.
readline() 뒤에 rstrip을 사용하지 않으면 출력 형식이 잘못되었습니다 라는 결과가 나온다.
뒤의 공백이 출력되면 안 되는 것 같다.
from sys import stdin
a, b = map(int, input().split())
result = []
li1 = sorted([stdin.readline().rstrip() for _ in range(a)])
li2 = sorted([stdin.readline().rstrip() for _ in range(b)])
for s in li2:
if binarySearch(li1, s):
result.append(s)
print(len(result))
for c in sorted(result):
print(c)
728x90
반응형
'Agorithm > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1654번 랜선 자르기(python) (0) | 2021.01.28 |
---|---|
백준 알고리즘 2110번 공유기 설치(python) (0) | 2021.01.28 |
백준 알고리즘 10816번 숫자 카드 2(python) (0) | 2021.01.28 |
백준 알고리즘 10815번 숫자 카드(python) (0) | 2021.01.28 |
백준 알고리즘 3048번 개미(python) (0) | 2020.08.07 |