barcode

백준 1764번 풀이

BOJ/[BOJ] Python

문제

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

 

1764번: 듣보잡

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

www.acmicpc.net

 

두 집합(듣지 못함/보지 못함)의 교집합을 출력하시오

 

풀이

이 문제는 굉장히 심플한 문제다. 푸는 것 자체는 그런데 출력이 씁...

 

import sys

N, M = map(int, sys.stdin.readline().split())

not_heard = set() #듣지 못한 사람
not_saw = set() # 보지 못한 사람

for _ in range(N):
    not_heard.add(sys.stdin.readline().rstrip())

for _ in range(M):
    not_saw.add(sys.stdin.readline().rstrip())

일단 집합(set)을 두 개 만들건데, 첫번째는 듣지 못한 사람이고 두번째는 보지 못한 사람이다. 아니 입력 순서가 듣-보임. 아무튼, 빈 집합을 만들고 입력 받자마자 추가하게 해 준다. 혹시나 중복되더라도 set 자료형은 알아서 중복 걸러주니까 걱정 ㄴㄴ.

 

not_heard_saw = not_heard & not_saw
not_heard_saw = list(not_heard_saw)
not_heard_saw.sort()

print(len(not_heard_saw))
for i in not_heard_saw:
    print(i)

다음은 출력인데... 일단 아래 세 줄은 길이와 요소를 출력하는거니까 설명은 생략한다. 솔직히 이거 풀 짬이면 다들 알잖아요 뭔지...

 

위의 세 줄은 순서대로 1) 교집합을 구하고 2) 그걸 리스트로 바꿔서 3) 정렬하는 코드이다. 출력 사전순이니까 정렬해야지.

 

import sys

N, M = map(int, sys.stdin.readline().split())

not_heard = set() #듣지 못한 사람
not_saw = set() # 보지 못한 사람

for _ in range(N):
    not_heard.add(sys.stdin.readline().rstrip())

for _ in range(M):
    not_saw.add(sys.stdin.readline().rstrip())

not_heard_saw = not_heard & not_saw
not_heard_saw = list(not_heard_saw)
not_heard_saw.sort()

print(len(not_heard_saw))
for i in not_heard_saw:
    print(i)

그래서 놀랍게도 이걸로 한방에 맞췄다.

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 11478번 풀이  (0) 2023.12.10
백준 1269번 풀이  (0) 2023.10.29
백준 1934번 풀이  (0) 2023.10.19
백준 10816번 풀이  (0) 2023.08.10
백준 7785번 풀이  (0) 2023.08.04