def solution(phone_book):
phone_book.sort(key=lambda x:x)
i = 0
while i < len(phone_book)-1: #for i in range(len(phone_book)-1):
k = len(phone_book[i])
for j in range(i+1, len(phone_book)):
if phone_book[j][:k] == phone_book[i]:
return False
elif len(phone_book[j])>k:
break
elif int(phone_book[j][0]) != int(phone_book[i][0]):
break
i += 1
return True
처음엔 이렇게 작성했는데 While문에 for문까지 써서 시간복잡도 기준 초과로 효율성 테스트에서 fail했다.
그래서 for문 하나만 작성해서 문제를 해결하는 방식으로 생각해봤다.
def solution(phone_book):
phone_book.sort(key=lambda x:x)
# return phone_book
for j in range(len(phone_book)-1):
if len(phone_book[j+1]) < len(phone_book[j]):
pass
elif phone_book[j] == phone_book[j+1][:len(phone_book[j])]:
return False
return True
어차피 문자열을 길이와 상관없이 앞 순서에 오는 숫자 크기에 맞게 정렬했기 때문에 맨 앞부터 2개씩만 비교하면 되겠다고 생각했다.
그리고 처음에는 elif phone_book[j] in phone_book[j+1]:
이렇게 작성했는데 "192", "12319202"의 경우도 False로 출력할 수 있어서 문자열 길이를 기준으로 나눠서 if문을 작성했다.