알고리즘/프로그래머스

프로그래머스 -(python) 전화번호 목록

programmers.co.kr/learn/courses/30/lessons/42577?language=python3

 

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

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

programmers.co.kr

유형

- 해시

 

풀이

1 1 9
1 1 9 5 6

 

숫자가 '119' '11956'이 주어졌다고 했을때, 

- 내림차순 정렬

11965를 슬라이싱 한다.

 

set 자료구조를 사용해서

 

11965, 1196, 119, 11, 1을 set에 넣는다

 

이제 다음 숫자인 119가 set에 포함되는지 아닌지를 알 수 있다.

 

따라서 다음 숫자가 set에 존재하면 false, 아니면 true를 반환하면 된다.

 

코드

def solution(phone_book):
    answer = True
    number = set()
    phone_book = sorted(phone_book, reverse = True)
    for book in phone_book:
        size = len(book)
        if book in number:
            answer = False
            break
        for i in range(size-1, 0, -1):
            arr = book[:i]
            number.add(arr)
    return answer