UNIT 12 (자료 구조)

정우석·2024년 5월 28일

동명이인 찾기 (딕션너리)

문제) 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

0개의 댓글