꼬꼬마 블로그

꼬꼬마의 기술 블로그

문제 설명

프로그래머스 레벨 2의 문제로 해시를 사용해 푸는 문제라고 합니다. 저는 해시를 사용하진 않았지만 굉장히 쉬웠어요.

 

연락처가 주어지고 연락처의 특정 번호가 다른 번호의 접두어가 된다면 False, 아니라면 True를 반환하는 문제입니다.

 

제한 사항이나 입출력 예제는 따로 설명할 부분이 없을 것 같습니다.

 

풀이

def solution(phone_book):
    for phone in phone_book:
        for target in phone_book:
            if target.find(phone) == 0 and target != phone:
                return False

    return True

 

변수 설명

phone: 현재 연락처입니다

target: 중첩 loop 문에서 사용될 비교 대상 연락처입니다

 

간단 설명

연락처만큼 순회를 하며 현재 연락처가 아닐 경우 현재 연락처가 비교 대상 연락처에 존재하며 그 인덱스가 0(처음) 일 경우 False를 반환합니다.

 

 

해시 풀이

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

 

해시를 통해 푸신 분의 코드를 확인해 보았습니다. 

 

코드를 보면 알다시피 각 연락처 string을 한 글자씩 순회하며 hash에 있는지 없는지 확인합니다. 개인적으로 더 비효율적이라고 생각하긴 하지만 출제자의 의도에 더 맞는 코드가 될 것 같습니다.