문제 설명
프로그래머스 레벨 2의 문제로 해시를 사용해 푸는 문제라고 합니다. 저는 해시를 사용하진 않았지만 굉장히 쉬웠어요.
연락처가 주어지고 연락처의 특정 번호가 다른 번호의 접두어가 된다면 False, 아니라면 True를 반환하는 문제입니다.
제한 사항이나 입출력 예제는 따로 설명할 부분이 없을 것 같습니다.
풀이
def solution(phone_book):
for phone in phone_book:
for target in phone_book:
if target.find(phone) == 0 and target != phone:
return False
return True
변수 설명
phone: 현재 연락처입니다
target: 중첩 loop 문에서 사용될 비교 대상 연락처입니다
간단 설명
연락처만큼 순회를 하며 현재 연락처가 아닐 경우 현재 연락처가 비교 대상 연락처에 존재하며 그 인덱스가 0(처음) 일 경우 False를 반환합니다.
해시 풀이
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
해시를 통해 푸신 분의 코드를 확인해 보았습니다.
코드를 보면 알다시피 각 연락처 string을 한 글자씩 순회하며 hash에 있는지 없는지 확인합니다. 개인적으로 더 비효율적이라고 생각하긴 하지만 출제자의 의도에 더 맞는 코드가 될 것 같습니다.
'개발 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 폰켓몬 (0) | 2021.01.28 |
---|---|
[프로그래머스] 튜플 (0) | 2021.01.27 |
[프로그래머스] 예상 대진표 (0) | 2021.01.27 |
[프로그래머스] 위장 (0) | 2021.01.27 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2021.01.27 |