[programmers] 전화번호목록
resilient
·2021. 8. 16. 20:23
728x90
반응형
해시 알고리즘은 개발할 때 필수적으로 알아야 할 알고리즘이다.
해시 알고리즘 문제도 자주 접하면서 친해질 필요가 있다고 생각한다.
전화번호 목록은 프로그래머스에 있는 코딩 테스트 연습에서 해시 카테고리에 있는 문제이다.
https://programmers.co.kr/learn/courses/30/lessons/42577
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
- 이 문제를 읽고 생각을 했다. 해시가 어떤 구조인지... 어떻게 사용해야 하는지...
파이썬에서는 딕셔너리라는 아주 좋은 해시 자료구조를 제공해주기 때문에 이를 사용해서 구현했다. - hash_map이라는 딕셔너리를 만들어주고 for문으로 탐색하면서 숫자 str값의 key와 value 1을 가진 원소들을 만들어준다.
- 다음으로는 딕셔너리 안에 같은 번호가 있는지 확인하기 위해 for문으로 숫자들을 꺼내고 temp라는 빈 문자열을 만든 뒤, 꺼낸 숫자를 또 쪼개서 하나씩 하나씩 temp라는 문자열에 추가해준다.
- 만약에 이렇게 만들어진 temp라는 문자열과 같은 문자열이 hash_map에 있을 때, 만약 꺼냈던 숫자와 다른 경우가 같은 번호가 들어가 있다고 생각할 수 있다.
def solution(phone_book):
answer = True
hash_map = {}
# 등장한 숫자들을 count 딕셔너리로 만듦
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
#print(hash_map)
return answer
print(solution(["119", "97674223", "1195524421"]))
반응형
'자료구조 & 알고리즘 > 프로그래머스(programmers)' 카테고리의 다른 글
[programmers] 튜플 (2019 카카오 개발자 겨울 인턴십) (0) | 2021.08.23 |
---|---|
[programmers] 위클리챌린지2주차/상호평가 (0) | 2021.08.20 |
[programmers] 가장 긴 팰린드롬 (0) | 2021.07.30 |
[programmers] 멀리뛰기 (0) | 2021.07.29 |
programmers - 순위 (0) | 2021.07.21 |