[python] 백준 1764 - 듣보잡

안영우·2021년 3월 2일
0

[ BOJ ]

목록 보기
3/8
post-thumbnail

📍 백준 1764 - 듣보잡

문제: 백준 1764 - 듣보잡

💡 나의 풀이

처음에 입력을 for i in range(n+m)만큼 받으려고 했으나, 그렇게 되면 두개의 array에 대한 범위를 새로 설정을 해야하기 때문에 반복문을 2개로 나눠 설정했다.

입력을 단순하게 input()으로 받아서 사용하니까 시간초과가 날뻔했다. sys라이브러리를 사용하자.

  1. input(): 3840ms
  2. sys.stdin.readline: 112ms

또, list comprehension 중에 strip()코드를 사용하지 않으면 출력 형식이 잘못되었습니다.판정을 받으니까 붙여주도록 하자.

이 문제의 핵심 코드는 intersection(교집합)인데, 두 개의 리스트 중 겹치는 원소를 출력하기 위해 사용했다.

intersection(교집합)은 다음과 같이 2가지 방법으로 사용 할 수 있다.
이때, 주의 할 점은 listset형으로 형 변환을 해줘야한다.

  1. set(s1) & set(s1)
  2. s1.intersection(s2)

마지막 출력에 해당개수를 출력하는 조건은 len()을 사용하면 쉽게 해결할 수 있다.
(처음에 cnt+=1를 써야하나 헤맸는데, 이런 간편한 방법이...)

import sys
input = sys.stdin.readline

n, m = map(int, input().split())

listen = [input().strip() for i in range(n)]
see = [input().strip() for j in range(m)]

# 방법 1
intersection = sorted(list(set(listen) & set(see)))

# 방법 2
intersection2 = sorted(list(set(listen).intersection(set(see))))

print(len(intersection))

for i in intersection:
    print(i)
profile
YW_Tech

0개의 댓글