#틀린 코드1
a, b = map(int, input().split())
arr = []
brr = []
test = []
for i in range(a):
arr.append(input())
for i in range(b):
brr.append(input())
for i in range(len(arr)):
if arr[i] in brr:
test.append(arr[i])
print(len(test))
test.sort()
for i in range(len(test)):
print(test[i])
최초로 짠 코드는 위와 같다.
무려 for문이 4개나 사용되었고, 단순하게 a와 b의 값을 입력받아 그 수만큼 문자열을 입력받고, in을 사용해 존재할 경우 test 리스트에 추가하는 방식이다.
근데 이 코드는 짜면서도 '어라라 시간 초과 날 것 같은데'라는 생각을 했다.
#틀린 코드2
from sys import stdin
a, b = map(int, input().split())
arr = []
for i in range(a + b): #입력받기
arr.append(stdin.readline().strip())
test = []
for i in range(a): #존재하는 지 확인
if arr[i] in arr[a :a + b]:
test.append(arr[i])
print(len(test))
test.sort()
print(*test, sep='\n')
이 코드는 for문을 4개에서 2개로 줄였고, input() 대신 stdin.readline()을 사용했다.
#정답 코드
from sys import stdin
a, b = map(int, input().split())
arr = set()
for _ in range(a):
arr.add(stdin.readline().strip())
brr = set()
for _ in range(b):
brr.add(stdin.readline().strip())
print(len(arr & brr))
test = list(arr & brr)
test.sort()
print(*test, sep= '\n')
고민을 하다가 교집합을 구하는 파이썬 기능이 있을 것 같다는 생각을 하게 되었고, 리스트 대신 set을 사용했다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
백준 > 10989 수 정렬하기 3 (0) | 2024.02.29 |
---|---|
백준 > 11656 접미사 배열 (0) | 2024.02.24 |
백준 > 1026 보물 (0) | 2024.02.23 |
백준 > 2750 수 정렬하기 (0) | 2024.02.23 |
백준 > 11720 숫자의 합 (0) | 2024.02.19 |