티스토리 뷰

반응형

문제

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조��

programmers.co.kr

 

 

나의 풀이

 

sort(key=len)을 통해 길이가 짧은 애들부터 정렬하고, 가장 짧은애의 길이를 기준으로 해시값이 같은지 확인했다

첫 시도라 효율성에서 걸릴줄 알았는데 놀랍게도 만점으로 통과.. 

def solution(phone_book):
    phone_book.sort(key=len)

    for i in range(len(phone_book) - 1):
        index = i + 1
        while index < len(phone_book):
            if hash(phone_book[i]) == hash(phone_book[index][:len(phone_book[i])]):
                return False
            index += 1

    return True

 

 

다른 풀이

 

해시를 꼭 사용하지 않아도 되는 풀이가 있었다. str.startswith()를 사용하는 풀이

def solution(phoneBook):
    phoneBook = sorted(phoneBook)

    for p1, p2 in zip(phoneBook, phoneBook[1:]):
        if p2.startswith(p1):
            return False
    return True

 

반응형