문제

 

내가 작성한 코드 (틀림)
from collections import deque

def solution(phone_book):
    phone_book.sort()
    phone_book = deque(phone_book)
    
    while phone_book:
        book = phone_book.popleft()
        if len([i for i in phone_book if book == i[:len(book)]]) != 0:
            return False
    else:
        return True

> 효율성(3, 4)에서 계속 시간초과로 에러가 뜬다...

 

참고한 코드
def solution(phoneBook):
    phoneBook = sorted(phoneBook)

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

> 참고 블로그

https://velog.io/@chaegil15/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%95%B4%EC%8B%9C-%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8-%EB%AA%A9%EB%A1%9D

 

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

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

velog.io

> 알아두어야 할 것

 1. startswith() 함수

  - 사용법 : str2.startswith(str1 or tuple) 형식

  - 반환값 : True / False

  - 의미 : str2가 str1으로 시작하면 True 를 아니면 False를 출력하는 함수이다.

 

 2. 문자열을 오름차순 할 때

  - 처음에 문자열을 오름차순하는 것을 숫자로 되어있다보니까 숫자 순으로 오름차순되는 것으로 오해해서 이해가 잘 안갔다.

  - 하지만, 문자순 오름차순하게 되면 예를 들어 ['12', '123', '568', '88'] 이것을 오름차순하게 되면, ['12', '123', '568', '88'] 이렇게 오름차순으로 정렬이 된다.

  - 그러므로 위에 코드가 zip() 함수로 묶어서 진행을 하게되면, 유사한 값끼리 비교를 하게되니까 정답을 추출할 수 있는 것이다.

+ Recent posts