초반에 해시를 이용해 구현하는 방법이 감이 안잡혀 일단 리스트를 이용해 구현했다.
def solution(phone_book):
answer = True
dic = {i:number for i,number in enumerate(phone_book)}
print(list(dic.values()))
for i in range(len(phone_book)):
for j in range(len(phone_book)):
if i != j:
if phone_book[j].find(phone_book[i]) == 0:
return False
return answer
물론 당연히 런타임에러가 발생함 ...
딕셔너리를 이용하여 아래와 같이 수정함
def solution(phone_book):
answer = True
dic = {number:i for i, number in enumerate(phone_book)}
# print(dic)
for number in phone_book: #각 번호 마다 확인
str_num = ''
for n in number: # 각 번호를 숫자 하나씩 붙여가며 접두사 존재여부 확인
str_num += n
if str_num in dic and str_num != number:
return False
return True
이때 str_num in dic 처럼 해당 문자열이 딕셔너리에 존재하는지 딕셔너리를 통해 조회해서 이전과는 달리 런타임에러가 발생하지 않는 것 같다.
[다만 딕셔너리에서 in을 할 때 문자열이면 딕셔너리 키값에 "abcdefg" 가 있고 "abc" in dic 을 해도 True 가 나오는지는 처음 알았다.] (사실이 아님 착각함)
처음에 위와 같은 원리로 되는 줄 알았는데 착각했다.
접두사가 되는 번호가 number일 때가 아니라 "123456789" 가 number일 때 str_num 이 "123" 이 되는 순간 False를 return하는 것이였다.
구현해놓고도 잘못 이해했다......
예를 들면
dic2 = {"abcdefg" : 1}
print("dic2:","abc" in dic2)
dic2: False
오해하면 안되겠다.