동명이인 찾기 (딕션너리)
문제) n명의 사람 이름 중에 같은 이름을 찾아 집합으로 만들어 돌려주는 알고리즘을 만들어라.
#두 번 이상 나온 이름 찾기
#입력 : 이름이 n개 들어 있는 리스트
#출력 : n개의 이름 중 반복되는 이름의 집합
def find_same_name(a):
name_dict = {}
for name in a:
if name in name_dict:
name_dict[name] += 1
else:
name_dict[name] = 1 # 새 이름이면 등장 횟수를 1로 추가하며 저장
result = set()
for name in name_dict:
if name_dict[name] >= 2:
result.add(name)
return result
name = ["Tom", "Jerry", "Mike", "Tom"]
print(find_same_name(name))
name2 = ["Tom", "Jerry", "Mike", "Tom", "Mike"]
print(find_same_name(name2))
#실행 횟수 : 2n
#계산 복잡도 : O(n)
연습문제
12-1) 연습 문제 6-3에서 풀어 본 학생 번호로 학생 이름을 찾는 문제를 딕셔너리를 이용해 풀어라.
다음과 같이 학생 번호와 이름이 주어졌을 때 학생 번호를 입력하면 그 학생 번호에 해당하는 이름을 돌려주고, 해당하는 학생 번호가 없으면 물음표를 돌려줘야 한다.
def find_name(a):
name_dict = {39: "Justin", 14: "John", 67: "Mike", 105: "Summer"}
if a in name_dict:
return name_dict[a]
else:
return "?"
n = int(input())
print(find_name(n))
출처
모두의 파이썬&알고리즘 합본호 / 이승찬 / 길벗 / 2018-12-10