프로그래밍 언어/파이썬

백준 > 1764 듣보잡

B612 2024. 2. 23. 23:45

아이고아이고 이게 무슨 문제냐!!

#틀린 코드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