접두어인 리스트 phone_number의 [0]이 다른 요소에 포함되어 있는지 확인하기위해서 for 문을 이용하고, 조건문의 in을 이용하였다.
def solution(phone_book): answer = True for i in range(1,len(phone_book)): if phone_book[0] in phone_book[i] or phone_book[i] in phone_book[0] : answer = False break return answer
정확성이 58%밖에 안된다. 실패....
또한 앞뒤로 일일히 비교해야 해서 효율성이 낮다.
answer = True a = [i for i in phone_book[0]] for k in (1, len(phone_book)): count = 0 b = [j for j in phone_book[k]] for x,y in zip(a,b): if x == y: count += 1 if count == len(a): answer = False break
zip을 이용하여 글자 하나하나를 비교하려 하였으나 너무 복잡하고 b = [j for j in phone_book[k]] 부분에서 list out of range 오류가 난다...
결국 다른사람의 도움을 받았다.ㅜ
phone_book.sort() answer = True for x,y in zip(phone_book, phone_book[1:]): if x in y or y in x: answer = False break return(answer)
sort()로 정렬을 하면 접두어를 기준으로 양 옆의 근처 숫자들을 확인해주면 되므로 zip를 이용하여 접두어가 들어가 있는지 아닌지 확인한다.
그러나 이방법을 써도 두개의 실패가 떳다? 엥
startswith를 이용하면 내가 찾고싶은 문자열이 찾는 대상의 문자열에 있는지 확인할 수 있다.
ex) 문자열 hello에서 hel 이 있는지 찾아본다. str1 = hello str1.startswith('hel') #True를 반환한다. str1에 해당되는 문자열이 없으면 False를 반환한다. str1.startswith('elo') #False
이 방법을 이용하여 문제에 적용한다.
phone_book.sort() answer = True for x,y in zip(phone_book, phone_book[1:]): if y.startswith(x): answer = False break return(answer)
in을 이용하는것 보다 효율적이다.