문제
내가 푼 풀이
def solution(phone_book):
answer = True
phone_book.sort(key=len)
i = 0
while i < len(phone_book):
now = phone_book[i]
for i in range(i+1,len(phone_book)):
if now == phone_book[i][:len(now)]:
answer = False
break
if answer == False:
break
i += 1
return answer
✔ 그냥 정렬하면 첫번째 문자의 크기를 기준으로 정렬되길래 길이를 기준으로 정렬할 순 없을까 찾아보다가 key = len을 조건으로 주면 된다는 것을 배웠다!!
➡정확성 테스트 12,15,19번과 효율성 테스트 4번에서 실패가 떴다.
결국 원인을 찾지 못하고 다른 사람의 풀이를 참고했다😥.
대체 어디가 틀린걸까?!?!
좋아요가 가장 많았던 풀이
def solution(phoneBook):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
✔ zip()
✔ startswith()
처음에는 길이 조건을 주지 않고 그냥 정렬하면 안되지 않나 했는데 어차피 접두어일 경우를 찾는 것이기 때문에 문제가 되지 않는 부분이었다. 예를 들어 8812, 88일 경우 정렬하면 88, 8812 순으로 정렬되니까 문제 없다!!
zip()은 알고는 있어도 직접 코드에서 내가 이용해본 적이 없다.흑 제대로 이해를 못했나?!
startswith()는 처음 본 함수다.p2가 p1으로 시작하는 문자열이라면 True를 반환하는 함수다.
해시를 이용한 풀이
def solution(phone_book):
answer = True
hash_map = {}
for phone_number in phone_book:
hash_map[phone_number] = 1
print(hash_map)
for phone_number in phone_book:
temp = ""
for number in phone_number:
print("number:",number)
temp += number
if temp in hash_map and temp != phone_number:
print(temp)
return False
return answer
해시 문제를 몇 문제 풀어보긴 했지만 아직 제대로 맞춘 적이 거의 없다ㅠㅠ..