728x90

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

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

 

 

# 조건

  • 듣지도 못한 사람의 명단
  • 보지도 못한 사람의 명단이 주어질 때
  • 듣지도 보지도 못한 사람의 명단을 구하라
  • N, M <= 500,000 자연수
 

# 접근 방법

  • 리스트를 이용하면 시간초과가 발생
  • 따라서 딕셔너리를 이용해주자.
  • 듣지도 못한 사람을 딕셔너리로 받아준 후, 보지도 못한 사람 명단에 존재한다면 result 리스트에 넣어준다.
  • result 리스트를 정렬한 후 길이와 명단 차례대로 출력
 

# 리스트 - 시간초과

# 수빈이 위치, 동생의 위치
N, M = map(int, input().split())

listen = [input() for _ in range(N)]
watch = [input() for _ in range(N)]

listen_watch = []
for i in listen:
    if i in watch:
        listen_watch.append(i)

listen_watch.sort()
print(len(listen_watch))
for j in listen_watch:
    print(j)

 

 

# 딕셔너리 - 통과

# 수빈이 위치, 동생의 위치
N, M = map(int, input().split())
result = []
listen = dict()

for i in range(N):
    listen[input()] = 1

for j in range(M):
    a = input()   
    if listen.get(a):
        result.append(a)
result.sort()
print(len(result))
for k in result:
    print(k)

 

 

  • 항상 시간 효율이 필요할 것 같을 땐, 줄일 수 있는 방법을 생각해보자.
728x90