phone_book 정렬 후 for문 돌아보면서 idx 붙어있는 전화번호 비교해보자 (낙찰✔️)
→ 전화번호는 숫자로 이루어진 문자열 → 문자열 정렬은 숫자로써가 아닌 문자열을 사전순으로 나열'1', '10', '5' → 다른 전화번호의 접두어라면 idx 붙어있을 것
📖풀이
📎Dictionary
def solution(phone_book): hs = {p:1 for p in phone_book} # 전화번호북 for phone in phone_book: prep = '' # 번호 뜯어서 접두사 맹들기 for p in phone: prep += p # 현재 폰 번호 아니면서 다른 폰 번호인 상황 == 한 번호가 다른 번호의 접두어인 경우 if prep in hs and prep != phone: return False return True
모든 전화번호를 해싱하자 → 모든 전화번호가 해시 테이블(hs)에 저장됨
이제 각 전화번호의 접두어가 해시 테이블에 존재하는지 확인하기
어떻게? 각 전화번호를 앞에서부터 뜯어서 해시 테이블에 존재하한다면 접두어 존재하는 것
🚨 해시 테이블에는 모든 전화번호가 들어 있으므로 자기 자신인 경우 제외해야 함
📎startswith()
def solution(phone_book): phone_book.sort() for p1, p2 in zip(phone_book, phone_book[1:]): if p2.startswith(p1): return False return True
phone_book 정렬을 하면 앞 뒤로 비교할 필요 없으니까 시간 단축 가능
…이것까지는 생각했는데 startswith() 메소드라는 아주 좋은 메소드가 있었음!
📖What I learned
startswith() 에 대해 알게 되었따!
문자열을 요소로 가진 리스트를 정렬하면 문자열을 사전순으로 나열(알고 있지만 착각하기 쉬움)