https://www.acmicpc.net/problem/1764
1764번: 듣보잡
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.
www.acmicpc.net
조건
- 첫째 줄에 듣도 못한 사람의 수 N ,보도 못한 사람의 수 M
- 둘째 줄부터, N개의 줄에 걸쳐 듣도 못한 사람의 이름과 N+2째 줄부터, 보도 못한 사람의 이름이 순서대로 주어진다. 듣도 못한 사람의 명단에는 중복 되는 이름이 없고, 보도 못한 사람의 명단 도 마찬가지임.
- 듣보잡의 수와 그 명단을 사전순으로 출력.
듣보잡 = 듣도 보지도 못한 잡놈
따라서, 듣도 못한 사람 명단에도 있고, 보도 못한 사람 명단에도 있는 사람을 찾아야함.
- 배열을 2개써서, 듣지못한 명단 1개 , 보지못한 명단 1개해서, 명단 1개를 기준으로 다른 명단을 하나하나 뒤져가는 방법 .
- 딕셔너리를 이용해서, 이름을 key, value를 Nohear,Nosee,NohearNosee 3가지로 해주면될듯.
#sol1) 배열 2개를 이용하는 방법
import sys
input = sys.stdin.readline
a,b = map(int,input().split())
Nosee=[input() for _ in range(a)]
Nohear=[input() for _ in range(b)]
NsNh=[]
for ns in Nosee:
for nh in Nohear:
if ns == nh : NsNh.append(nh) # O(1)
print(len(NsNh))
for nn in NsNh:
print(nn)
#시간 복잡도 O(N^2)
#sol2)map,dictionary를 이용하는 방법
import sys
input = sys.stdin.readline
a,b = map(int,input().split())
dic={}
ans=[]
cnt=0
for i in range(a):
name=input().strip() #strip을 써줘야, key에 개행문자가 안들어감.
dic[name]='nosee'
for i in range(b):
name =input().strip()
if name in dic:
dic[name]='nohearnosee'
cnt+=1
else
dic[name]='nohear'
print(cnt)
for k,v in dic.items:
if v =='nohearnosee':
ans.append(k)
print(sorted(k))
#시간 복잡도 O(N) , dictionary는 hash니까 1, sorting -> NlogN
# 시간 복잡도 NLOGN
'알고리즘 문제(SOL)' 카테고리의 다른 글
[백준/2304/파이썬] 창고 다각형 (0) | 2021.12.16 |
---|---|
[백준/10799/파이썬] 쇠막대기 (0) | 2021.12.16 |
[백준/1874/파이썬] 스택 수열 (0) | 2021.12.16 |
[백준/1918/파이썬] 후위 표기식(postfix) (0) | 2021.12.16 |
[백준/1743/파이썬] 음식물 피하기 (0) | 2021.11.18 |