영아일지

[프로그래머스 고득점 키트 - 해시] Level2 - 전화번호 목록 본문

디지털/코딩테스트

[프로그래머스 고득점 키트 - 해시] Level2 - 전화번호 목록

영아일지 2023. 3. 23. 11:58

내 풀이

 

sol 1 )

접두사를 정렬한 후, 바로 옆 문자와 비교하여 같은 값을 가지면 return false

sort() 함수는

lst = ['11', '234', '11115' ] 일 경우 

lst.sort()   #['11', '11115'  , '234' ] 로 나타난다 !  

문자열의 번호 순으로 나열하기 때문에 바로 옆에랑만 비교해줘도 된다

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

 

sol 2 ) 문제 분류가 해시로 되어있길래 다른 사람풀이를 보았다.

1.  hash_map 이라는 딕셔너리를 통해 전화번호를 복제하고 (phone_book)

2.  phone_book에 있는 것을 하나씩 불러오며 temp이라는 변수에 접두사를 하나씩 생성하고

3. 자기자신이 아닌 것들 중 hash_map에 속하는 것이 있으면 return False를 해준다.

def solution(phone_book):
    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:
                return False
    return True

level 2 부터는 효율성도 고려해야하기 때문에 값이 나오면 바로 return을 해주는 등 시간복잡도를 고려해야 한다!