블로그 이사🏡 했습니다. 👉🏻 둘러보기
본문 바로가기
  • What Get's You Here, Won't Get You There
CS/Problem-solving

백준 1764번 Pseudo code

by OMIN_ 2022. 5. 1.

문제 링크

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

 

1764번: 듣보잡

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

www.acmicpc.net

 

시간 제한 / 메모리 제한

2 초 256 MB

 

문제

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

 

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.

출력

듣보잡의 수와 그 명단을 사전순으로 출력한다.

예제 입력

3 4
ohhenrie
charlie
baesangwook
obama
baesangwook
ohhenrie
clinton

예제 출력

2
baesangwook
ohhenrie

문제 풀이를 위해 생각한 것

  1. 중복되는 값을 찾는 것은 즉 교집합을 찾는 것
  2. 교집합을 구하는 연산의 시간 복잡도는 얼마일까

 

사용한 자료구조

집합 자료구조.

집합 자료구조의 삽입, 삭제, 조회는 O(1)이며, 교집합 연산을 통해 중복을 효율적으로 제거할 수 있다.

 

풀이 코드

n, m = 입력값 split하여 정수로 변환
set1, set2 = 두 개의 집합 자료구조 선언

n번 동안:
	set1.add(입력값)

m번 동안:
	set2.add(입력값)

arr = list(set1 & set2) 교집합 연산한 결과 리스트 자료구조로 변환 및 할당
arr.sort()

arr의 원소 a에 대하여:
	print a

 

시간 복잡도 분석

N+M개의 이름을 집합에 추가 -> O(1)(N+M)

교집합 연산 -> O(min(len(s), len(t))). 다만 최악의 경우 O(len(s) * len(t)) 가 될 수 있음.

정렬 -> O(NlogN)

출력 -> 최대 O(N)

 

따라서 N = M인 상황에서, 교집합 연산이  O(len(s) * len(t))인 최악의 경우에는 O(N^2).

일반적인 경우에는 O(NlogN)의 시간 복잡도를 가진다.

문제에서 중요한 부분

입력 받아야 하는 양이 많다. 파이썬 코드로 구현하게 된다면 sys.stdin.readline을 사용할 필요가 있다.

 

'CS > Problem-solving' 카테고리의 다른 글

백준 1302번 Pseudo code  (0) 2022.05.01
백준 3986번 Pseudo code  (0) 2022.05.01
백준 1158번 Pseudo code  (0) 2022.05.01
백준 1021번 Pseudo code  (0) 2022.04.30
백준 1417번 Pseudo code  (0) 2022.04.30

댓글