디지털/코딩테스트
[프로그래머스 고득점 키트 - 해시] Level2 - 전화번호 목록
영아일지
2023. 3. 23. 11:58
내 풀이
sol 1 )
접두사를 정렬한 후, 바로 옆 문자와 비교하여 같은 값을 가지면 return false
sort() 함수는
lst = ['11', '234', '11115' ] 일 경우
lst.sort() #['11', '11115' , '234' ] 로 나타난다 !
문자열의 번호 순으로 나열하기 때문에 바로 옆에랑만 비교해줘도 된다
def solution(phone_book):
phone_book.sort()
for i in range(len(phone_book)-1):
if phone_book[i] == phone_book[i+1][:len(phone_book[i])]:
return False
return True
sol 2 ) 문제 분류가 해시로 되어있길래 다른 사람풀이를 보았다.
1. hash_map 이라는 딕셔너리를 통해 전화번호를 복제하고 (phone_book)
2. phone_book에 있는 것을 하나씩 불러오며 temp이라는 변수에 접두사를 하나씩 생성하고
3. 자기자신이 아닌 것들 중 hash_map에 속하는 것이 있으면 return False를 해준다.
def solution(phone_book):
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:
return False
return True
level 2 부터는 효율성도 고려해야하기 때문에 값이 나오면 바로 return을 해주는 등 시간복잡도를 고려해야 한다!