Solved.ac Class [3]

실버 4 등급 : 듣보잡

문제 설명

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

  1. 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M
  2. 둘째 줄부터 N만큼 듣지도 못한 사람
  3. 그 다음 M만큼 보지도 못한사람
  • 중복 이름 없음
출력은 사전순으로 출력

예제 입출력

input

3 4
ohhenrie
charlie
baesangwook
obama
baesangwook
ohhenrie
clinton

output

2
baesangwook
ohhenrie

문제 접근 방식

문제를 보며 느낀점은 프로그래머스 Lv.1의 완주하지 못한 사람(? 맞는지 모르겠으나) 문제와 상당히 유사한 느낌이었습니다. 그래서 set함수를 사용하기로 했습니다.

set은 list와 다르게 add라는 함수를 통해 업데이트를 해줍니다. set에는 intersection, union 등 다양한 연산자기능을 해주는 함수가 있습니다. 얼마전 효율적인 코딩에서도 다룬 내용이라 바로 적용해보기로 했습니다.

set 함수 docs

여기에서 intersection은 교집합의 기능을 해줍니다. 듣지도 못한 사람 중에 보지도 못한 사람이 있다면? 그 사람이 바로 듣보잡이 됩니다.

제출을 했는데 계속 18%에서 실패했습니다. 그렇게 시간 까먹다가 문제를 다시 보니 사전순으로 출력..하 역시 문제를 잘 봐야합니다. 간단하게 sorted 함수를 사용 후 제출하니 바로 풀렸습니다.

문제 풀이

import sys
n,m = map(int, sys.stdin.readline().split())

a= set()
b= set()
for i in range(n):
    a.add(sys.stdin.readline()[:-1])
for j in range(m):
    b.add(sys.stdin.readline()[:-1])

answer = sorted(a.intersection(b))
print(len(answer))
for i in answer:
    print(i)