문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42577
풀이
이 문제의 유형은 해시로 되어있으나, 사실 해시를 사용하지 않고 정렬 후 다음 인덱스의 값이 현재 인덱스의 값으로 시작하는지 확인하는 방식으로 공간 복잡도도 낮추고, 시간 복잡도도 낮출 수 있는 방식이다.
하지만 이 문제의 유형이 해시이기에 해시를 사용하여 풀이하였다.
코드를 읽는 입장에서는 해시 방식이 더 간결하고 명확하게 보이는 것 같다.
def solution(phone_book):
answer = True
phone_prefix = {}
for num in phone_book: # 해시맵에 전화번호들 저장
phone_prefix[num] = 1
for i in range(len(phone_book)): # 전화번호부를 하나씩 순회
for j in range(len(phone_book[i])-1): # 전화번호를 앞에서부터 한 글자씩 슬라이싱, 글자 전체와 일치하는 것은 확인하지 않기 위해 길이에서 하나 뺀 경우까지만 체크
try:
if phone_prefix[phone_book[i][:j+1]]: # 해시맵에 존재하는지 확인
return False
except: # 존재하지 않으면 Exception이 발생, 따라서 이를 catch
continue
return answer
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(Python) 백준 6588번 - 골드바흐의 추측 (0) | 2024.03.19 |
---|---|
[프로그래머스 Lv.2] 의상 (Python) (1) | 2024.03.18 |
(JAVA) 거스름돈 (1) | 2024.02.29 |
(JAVA) 올바른 괄호의 갯수 (1) | 2024.02.14 |
(JAVA) 올바른 괄호의 갯수 (0) | 2024.02.12 |