[백준] 1764 듣보잡

새싹·2021년 11월 18일
0

알고리즘

목록 보기
24/49

📌문제 링크

https://www.acmicpc.net/problem/1764

💡 문제 풀이 - 첫 번째 시도

처음에는 간단하게 듣도 못한 사람을 입력받고, 보도 못한 사람을 입력받을 때 입력받은 사람의 이름이 듣도 못한 사람의 배열에 있는지 확인하는 코드를 짰는데 python3와 pypy3 모두 시간초과가 나왔다...
in 연산에서 시간초과가 나는 것 같았다

📋코드 - 첫 번째 시도

# 1764 듣보잡
n, m = map(int, input().split())
heard = []  # 듣도 못한 사람
saw = []  # 보도 못한 사람
hs = []  # 듣보잡

for i in range(n):
    heard.append(input())

for i in range(m):
    saw.append(input())
    if saw[i] in heard:
        hs.append(saw[i])

print(len(hs))
hs.sort()
for n in hs:
    print(n)

💡 문제 풀이 - 두 번째 시도

그래서 구글링을 해 보니 교집합 연산을 해서 풀 수 있다는 걸 알았다
교집합으로 푸니까 python3에서도 통과함
겹치는 요소를 찾을 때는 in연산보다 교집합 연산이 효율적이라는 걸 알 수 있었다

📋코드 - 두 번째 시도

# 1764 듣보잡
n, m = map(int, input().split())
heard = []  # 듣도 못한 사람
saw = []  # 보도 못한 사람
hs = []  # 듣보잡

for i in range(n):
    heard.append(input())

for i in range(m):
    saw.append(input())

hs = list(set(heard) & set(saw))

print(len(hs))
hs.sort()
for n in hs:
    print(n)

0개의 댓글