어떤 번호의 접두번호가 다른 어떤 번호와 같다면 False
를 리턴하고, 그런 번호가 없으면 True
를 리턴하는 문제이다.
문제풀이
def solution(phone_book): answer = True phone_book.sort() cnt = 0 for i in phone_book : le = len(phone_book[0]) if phone_book[0] in i[:le] : cnt += 1 if cnt >= 2 : answer = False break return answer
일단 이 코드는 틀렸다.
sort()
후에 가장 처음 요소값이 접두사로 들어있는 경우를 제외해주었는데, 4개가 틀렸다.
이 코드가 틀렸다는 말은, 이후 번호도 비교해주어야 한다는 뜻이다.
전체를 전체와 비교한다면 가능하겠지만, 아마도 효율성을 통과하지 못할 듯 하여 구글링을 시전하였다.
다른 사람의 코드
def solution(phone_book): answer = True phone_book.sort() for i in range(len(phone_book)-1) : if len(phone_book[i]) < len(phone_book[i+1]) : if phone_book[i+1][ :len(phone_book[i])] == phone_book[i] : answer = False break return answer
출처 : https://velog.io/@chaegil15
이분이 설명하기를 리스트를sort()
해주었기 때문에 앞에 있는 번호와 뒤에 있는 번호 하나씩만 비교해줘도 맞을것은 맞고 틀릴것은 틀릴것이다 판단하였다고 한다. 너무 동의한다.한걸음만 더 생각하면 맞출수도 있었을거라 생각하니 슬펐다.