배운점 : sort()함수, startswith()함수
원 코드
def solution(phone_book):
answer = True
num = 0
while num < len(phone_book):
x = phone_book[num]
phone_book.remove(x)
num2 = 0
while num2 < len(phone_book):
if x in phone_book[num2]:
answer = False
break
num2+=1
phone_book.insert(num,x)
num+=1
return answer
결과 : 효율성 0점 정확도 : 11/13
처음으로 짠 코드이다. in을 사용했기 떄문에 접두어임을 알 수 없고, 이중 loop이기 때문에 효율성도 떨어진다.
모범답안
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
여기서 sort()라는 개념과, 이중 zip이라는 함수를 처음으로 접했다.
sort() : 말 그대로 정렬한다. 시간복잡도는 O(N logN)이다.
zip() : 여러 개의 리스트를 짝지어준다.
startswith() : in의 괄호 안에 들어간 것의 길이만큼, 즉 이 함수가 바로 접두어 체크하는 함수이다.
for num,upper,lower in zip('123','abc','ABC'): print(number, upper, lower)
같이 사용한다.(zip을 사용하지 않을 경우, num에 있는 값부터 순서대로 출력된다)
모범답안 참고 후 새로 짠 코드
def solution(phone_book):
answer = True
phone_book.sort()
for i in range(len(phone_book) - 1):
if phone_book[i] in phone_book[i+1][:len(phone_book[i])]:
return False
return True
정렬 후, 숫자이므로 뒤의 값이 앞의 값보다 클 것이므로(길이든 크기든) 앞의 리스트 값만큼 확인해보고 있으면 false를 리턴해주는 코드로 짰다. startswith함수도 나름 쓸만하지만, sort() 이거는 항상 기억해두고 있어야겠다.