
✔️ 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42577
문제 설명
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.구조대 : 119
박준영 : 97 674 223
지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.제한 사항
phone_book의 길이는 1 이상 1,000,000 이하입니다.
각 전화번호의 길이는 1 이상 20 이하입니다.
같은 전화번호가 중복해서 들어있지 않습니다.
startswith() 사용def solution(phone_book):
phone_book.sort()
for i in range(len(phone_book) - 1):
if phone_book[i + 1].startswith(phone_book[i]):
return False # 접두사 관계가 있으면 False
return True # 접두사 관계가 없으면 True
def solution(phone_book):
answer = True
hash_map = {}
for phone_number in phone_book:
hash_map[phone_number] = 1
for phone_number in phone_book:
temp = ""
for number in phone_number:
temp += number
if temp in hash_map and temp != phone_number:
answer = False
return answer
나는 해시 자료구조의 효율성을 아직 잘 몰라서 (시간 복잡도 아직 모름;;) 2번의 경우 그냥 hash_map을 사용하지 않고 phone_book 자체를 사용하면 되지 않나 싶었음
그래서 아래와 같이 해시맵을 사용하지 않아봤음
def solution(phone_book):
answer = True
for phone_number in phone_book:
temp = ""
for number in phone_number:
temp += number
if temp in phone_book and temp != phone_number:
answer = False
return answer
그러나 시간 초과!