def solution(phone_book):
answer = True
# ["119","1195524421","97674223"]
phone_book.sort()
for i in range(0,len(phone_book)-1):
if phone_book[i+1][:len(phone_book[i])] == phone_book[i]:
answer = False
break
return answer
if ~ return False else ~ return True
: 순서대로 비교하기때문에 첫번째 str이 두번째 str의 접두어가 아니고, 세번째 str의 접두어일 경우를 고려하지 못함. 첫번째랑 두번째 비교했을 때 바로 True로 반환하기 때문에answer = True
phone_book.sort()
: 문자열 비교에서는 보통 정렬 먼저!break
: for문을 다 비교할 필요 없으니까def solution(phoneBook):
# ['123', '456', '789']
phoneBook = sorted(phoneBook)
# p1, p2 = 123 456
# p1, p2 = 456 789
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
문자열 정렬
이어서 "1195524421" 이 "97674223"보다 앞에 오게 됨 어차피 접두어만 찾는거라서 정렬 후에는 앞 뒤만 비교해도 상관없음리스트 명.sort()
: 리스트형의 메소드이며 리스트 원본값을 직접 수정sorted(리스트 명)
: 내장 함수이며 리스트 원본 값은 그대로이고 정렬 값을 반환list = [2,3,1]
sort_list = list.sort()
print(list) # [1,2,3]
print(sort_list) # None -> 정렬된 값은 리턴되지 않음!! 원본 리스트 값이 정렬된 값으로 수정된 것!!
list = [2,3,1]
sorted_list = sorted(list)
print(list) # [2,3,1] -> 원본 리스트는 값이 유지됨
print(sorted_list) # [1,2,3] -> 정렬된 새 리스트
print(zip([1,2,3], (4,5,6), "abcd")) # <zip object at 0x7f304c099380>
test = list(zip([1,2,3], (4,5,6), "abcd"))
print(test) # [(1, 4, 'a'), (2, 5, 'b'), (3, 6, 'c')]
str = "this is string example....wow!!!"
print(str.startswith( 'this' )) # True
print(str.startswith( 'is', 2, 4 )) # True
print(str.startswith( 'this', 2, 4 )) # Fasle
print(str.endswith( 'wow!!!' )) # True
print(str.endswith( 'is', 2, 4 )) # True
print(str.endswith( 'is', 2, 6 )) # Fasle
한줄 평: 정답을 흘끔흘끔 훔쳐보긴 했지만 그래도 풀긴 풀었네.. 2게 된다고?