1. 문제
https://programmers.co.kr/learn/courses/30/lessons/42577
2. 풀이
2.1. 딕셔너리(해쉬)를 이용한 풀이
- prefix_dic이라는 dictionary 에 모든 단어를 집어 넣습니다.
- for문을 돌면서 문자 길이 -1 까지 체크를 하면서 dictionary에 해당 문자열이 존재하는지 확인합니다.
- 문자열의 길이가 20이 최대이기 때문에 속도에 문제가 없는 소스코드입니다.
def solution(phone_book):
answer = True
prefix_dic = {}
for x in phone_book:
prefix_dic[x] = True
for x in phone_book:
for i in range(0, len(x)-1):
if x[:i + 1] in prefix_dic.keys():
answer = False
return answer
2.2. 정렬 후 zip을 이용한 풀이
- string을 정렬하면 사전순서대로 자연스럽게 정렬이 됩니다.
- 아래와 같이 zip을 사용하면 i와 i+1 인덱스의 요소를 가져오면서 계속해서 비교하여 굉장히 빠르게 문제를 해결할 수 있습니다.
def solution(phoneBook):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
print(p1, p2)
if p2.startswith(p1):
return False
return True