728x90
문제) 김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.
입력) 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다. 듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.
출력) 듣보잡의 수와 그 명단을 사전순으로 출력한다.
import sys
N, M = map(int, input().split())
N_set = set([sys.stdin.readline().strip() for _ in range(N)])
M_set = set([sys.stdin.readline().strip() for _ in range(M)])
result = sorted(list(N_set & M_set))
print(len(result))
for name in result:
print(name)
풀이 : 듣도 못한 사람과 보도 못한 사람을 입력 받은 뒤 중복되는 사람들 찾기 위해 각각 set 함수를 이용하여 N_set, M_set에 저장한다. 그 뒤 set함수 내에 내장되어있는 교집합 기능을 이용하여 중복되는 사람을 찾아낸 뒤 결과값을 list로 변환해주면서 사전순으로 정렬해준다.
추가.
만약에 N_set과 M_set에 입력할 데이터를 받을 때 input()을 쓰게 된다면 소요시간이 엄청나게 늘어나게 된다. 문제마다 사용하기에 알맞은 함수가 따로 있기 때문에 해당 함수를 찾아서 적용시키는 것이 중요하다.
'코딩 공부 > 파이썬' 카테고리의 다른 글
백준) 7568 - 덩치 [파이썬] (0) | 2022.06.19 |
---|---|
백준) 2447 - 별찍기 [파이썬] (0) | 2022.06.19 |
백준) 10815 - 숫자 카드 [파이썬] (0) | 2022.06.17 |
백준) 11478 - 서로 다른 부분 문자열의 개수 [파이썬] (0) | 2022.06.16 |
백준) 1269 - 대칭 차집합 [파이썬] (0) | 2022.06.14 |