[Baekjoon] 1764번: 듣보잡(해시 Silver4) - Python

꼬마요리사레미·2023년 8월 3일

Algorithm

목록 보기
7/41

1. 문제

듣보잡

2. 코드

N, M = map(int, input().split())
dict = {}  

for _ in range(N + M):
    name = input()
    dict[name] = dict.get(name, 0) + 1

answer = sorted([name for name, count in dict.items() if count == 2])

print(len(answer))
for name in answer:
  print(name)

3. 로직

1. 입력과 딕셔너리 생성하기

N, M = map(int, input().split())
dict = {}  

for _ in range(N + M):
    name = input()
    dict[name] = dict.get(name, 0) + 1
  1. 두 개의 정수 N과 M을 입력 받는다.
    여기서 N은 듣도 못한 사람의 수를, M은 보도 못한 사람의 수를 의미한다.
  2. 듣도 못한 사람과 보도 못한 사람의 정보를 저장할 dict 딕셔너리를 생성한다.
  3. for 반복문을 통해 N + M 번 반복하면서 이름을 입력받고, dict 딕셔너리에 저장한다.
  • 각 반복마다 이름을 입력받는다.
  • 이름이 딕셔너리에 존재한다면, 해당 이름의 횟수를 1 증가시킨다.
  • 이름이 딕셔너리에 존재하지 않는다면, 기본값과 새로운 키를 딕셔너리에 추가한다.

2. 듣도 보도 못한 사람 찾기

answer = sorted([name for name, count in dict.items() if count == 2])
  1. 명단을 순회하면서 이름(name)과 해당 이름의 등장 횟수(count)를 가져온다.
  2. 두 번 나타난 경우엔 듣도 보도 못한 사람에 해당한다.
  3. 듣도 보도 못한 사람의 명단을 저장할 answer 리스트에 추가한다.
  4. 명단을 사전순으로 출력하기 위해 정렬을 수행한다.

3. 출력하기

print(len(answer))
for name in answer:
    print(name)
  1. 듣도 보도 못한 사람의 인원을 출력한다.
  2. 이미 정렬된 리스트인 answer 를 활용하여 이름을 오름차순으로 출력한다.

0개의 댓글