-
백준 1764 파이썬 | 듣보잡알고리즘 BOJ 2021. 8. 30. 19:46
코드
from sys import stdin input = stdin.readline set1 = set() set2 = set() N, M = map(int, input().split()) for i in range(N): set1.add(input().strip("\n")) for j in range(M): set2.add(input().strip("\n")) ans = sorted(list(set1.intersection(set2))) print(len(ans)) for os in ans: print(os)
설명
듣도 못한 사람의 명단, 보도 못한 사람의 명단에서 두 집합의 교집합(듣도 보도 못한 사람)을 구하면 되는 문제이다.
문제 자체가 집합 냄새가 나서 파이썬의 set으로 접근하였다. set을 사용하면 함수를 이용해서 간단하게 교집합을 구해준다.
듣도 못한 사람을 set1에, 보도 못한 사람을 set2에 추가한 뒤, intersection을 이용해 set1 과 set2의 교집합을 구한다. 출력할 때에 알파벳순으로 출력해야하기 때문에 리스트로 바꾼 교집합을 정렬해준다. 마지막으로 듣도 보도 못한 사람의 수를 출력하고 그 다음 줄부터 듣도 보도 못한 사람 리스트에 있는 사람을 한 명씩 차례로 출력해 주면 된다.
다른 사람의 풀이를 보니 리스트를 출력할 때에 반복문을 쓰는 것 말고 print("\n".join(list)) 이렇게 출력해도 결과가 같다. 리스트 한 요소마다 요소+"\n" 이런 식으로 하나씩 출력해 주는 표현식이다. 알고리즘을 풀다 보면 리스트에 있는 요소를 한줄한줄씩 출력해야 할 때가 많은데, 반복문을 쓰기보다 join 표현을 쓰면 한 줄에 코드를 쓸 수 있다는 장점이 있다.
메모리: 41748 KB
시간: 136 ms
문제
https://www.acmicpc.net/problem/1764
1764번: 듣보잡
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.
www.acmicpc.net
'알고리즘 BOJ' 카테고리의 다른 글
백준 1003 파이썬 | 피보나치 함수 (0) 2021.08.31 백준 17219 파이썬 | 비밀번호 찾기 (0) 2021.08.30 백준 1676 파이썬 | 팩토리얼 0의 개수 (0) 2021.08.30 백준 1620 파이썬 | 나는야 포켓몬 마스터 이다솜 (0) 2021.08.29 백준 17626 파이선 | Four squares (0) 2021.08.29