https://www.acmicpc.net/problem/1764
문제 풀이
- 듣도 못한 사람과 보도 못한 사람의 리스트를 저장한다.
- Counter 모듈을 이용해 중복된 개수를 딕셔너리로 받는다.
- 중복된 개수가 1 이상인 key값만 리스트에 저장하고
- 그 리스트의 길이을 출력한다.
- 리스트를 정렬하여 한 줄씩 출력한다.
solution - 성공/ Counter와 filter를 활용한 풀이
from collections import Counter
import sys
n,m = list(map(int, sys.stdin.readline().strip().split()))
# Counter를 활용하여 이름과 중복된 개수를 딕셔너리로 반환받음.
data = Counter([sys.stdin.readline().strip() for _ in range(n+m)])
# Counter({'ohhenrie': 2, 'baesangwook': 2, 'charlie': 1, 'obama': 1, 'clinton': 1})
# filter를 활용하여 중복된 개수가 1이상인 명단만 추출
duplicate_data = list(filter(lambda str: data[str] > 1, data))
# ['ohhenrie', 'baesangwook']
# 사전순으로 정렬
duplicate_data.sort()
print(len(duplicate_data), *duplicate_data, sep ='\n')
solution2 - 딕셔너리와 리스트를 활용한 풀이
import sys
n,m = list(map(int, sys.stdin.readline().strip().split()))
dict = {}
duplicate_list = []
for _ in range(n+m):
word = sys.stdin.readline().strip()
if word in dict: # 이름이 dict에 있으면 중복된 리스트에 추가
duplicate_list.append(word)
else: # 이름이 dict에 없으면 dict에 value의 기본값을 0으로 추가
dict.setdefault(word,0) # value값을 0
# print(dict)
# {'ohhenrie': 0, 'charlie': 0, 'baesangwook': 0, 'obama': 0, 'clinton': 0}
# print(duplicate_list)
# ['baesangwook', 'ohhenrie']
duplicate_list.sort()
print(len(duplicate_list),*duplicate_list,sep='\n')
새롭게 배운 점.
dict.setdefault(key값, 기본값)
- 만약 딕셔너리에 키-값 쌍을 추가할때 활용한다.
- 만약 value값이 없다면 setdefault 함수를 활용해 기본값을 설정할 수 있다.
dict = {'수학':100,'음악':50,'과학':90}
# 새로운 키와 값을 추가하고 싶으면? setdefault 활용하기
dict.setdefault('국어') # 두 번째 인자를 넣지 않으면 기본값 None
print(dict) {'수학': 100, '음악': 50, '과학': 90, '국어': None}
dict.setdefault('영어', 60) # 두 번째 인자에 기본값 설정
print(dict) # {'수학': 100, '음악': 50, '과학': 90, '국어': None, '영어': 60}
'algorithm > 백준' 카테고리의 다른 글
[PYTHON/파이썬] 2851 슈퍼 마리오 - 다중조건 내림차순 (0) | 2023.02.15 |
---|---|
[PYTHON/파이썬] 2563 색종이 (0) | 2023.02.15 |
[PYTHON/파이썬] 2738 행렬 덧셈 (0) | 2023.02.09 |
[PYTHON/파이썬] 10250 ACM호텔 - zfill() 0으로 자릿수 채우는 법 (0) | 2023.02.09 |
[PYTHON/파이썬] 4949 균형잡힌 세상 - ()[]{}<> (0) | 2023.02.09 |
댓글