프로그래머스/알고리즘 고득점 Kit

[프로그래머스] [해시] Lv.2 /전화번호 목록 (파이썬/Python)

junslee 2025. 3. 25. 14:46

1. 문제 설명

2. 풀이 과정 

phone_book을 sort()로 정렬한다.

phone_book의 길이를 1을 빼서 접두사로 처음에 비교할 값을 뺀 길이를 구한다.

for문으로 인덱스를 반복해서 phone_book[i+1]로 비교할 대상 다음 것부터 startswith()으로 phone_book[i]와 앞부분에서부터 비교해 같으면 False를 반환하고, 다르면 True를 반환한다.

3. 코드

def solution(phone_book):
    phone_book.sort()
    for i in range(len(phone_book)-1):
        if phone_book[i+1].startswith(phone_book[i]):
            return False
    return True

4. 추천 코드

def solution(phone_book):
    answer = True
    hash_map = {}
    for phone_number in phone_book:
        hash_map[phone_number] = 1
    for phone_number in phone_book:
        temp = ""
        for number in phone_number:
            temp += number
            if temp in hash_map and temp != phone_number:
                answer = False
    return answer

5. 추천 코드의 풀이 과정

#해시를 활용한 코드

hash_map라는 이름의 해시 테이블을 생성하여 전화번호를 저장한다.

각 전화 번호는 해시 테이블의 키로 사용되며, 값은 임의로 1로 설정한다.

각 전화번호의 접두사를 확인하기 위해, 전화번호의 각 숫자를 하나씩 추가하면서 해시 테이블에 해당 접두사가 있는지 확인한다.

현재 확인 중인 전화번호 자체를 비교하지 않도록 temp =! phone_number을 추가한다.