코딩테스트 연습 - 전화번호 목록 | 프로그래머스 스쿨 (programmers.co.kr)
나의 풀이
- 해시 이용
def solution(phone_book):
# 1. Hash map을 만든다
hash_map = {}
for phone_number in phone_book:
hash_map[phone_number] = 1
# 2. 접두어가 Hash map에 존재하는지 찾는다
for phone_number in phone_book:
jubdoo = ""
for number in phone_number:
jubdoo += number
# 3. 접두어를 찾아야 한다 (기존 번호와 같은 경우 제외)
if jubdoo in hash_map and jubdoo != phone_number:
return False
return True
1) HashMap 만들기
- HashMap이란 Key-Value의 Pair를 관리하는 클래스이다.
- Key는 phone_number / Value는 1로 설정한다.
- 기본적으로 Hash map은 위와 같이 만들어주는게 정석이다.
- 여기서 Value == 1의 의미는 숫자가 1개 존재한다는 것이다.
2) 모든 전화번호 Hashing 하기 (Hash Map에 추가하기)
- 'Hashing을 한다'라고도 표현하는데, HashMap에 전화번호를 전부 추가해보자.
- 위 코드의 동작 방식은 다음 예시로 설명하는 것이 가장 쉽게 이해가 가능할 것이다.
- Hash Map을 보고 나면 별게 아니다. 이 문제에서는 Key 값으로 전화 번호를 관리하는 전화번호부다.
![](https://blog.kakaocdn.net/dn/ETzgM/btrfWby8tnU/lu7xO7KLZhKRc4kyPTuLN1/img.png)
3) 각 전화번호의 접두어가 HashMap에 존재하는지 확인하기
- 존재하는 모든 전화번호가 HashMap에 등록되었다.
- 이제는 각 전화번호의 접두어가 HashMap에 존재하는지 확인하는 것이다.
- Length 1~전체 길이 - 1 까지의 substring을 떼어서, HashMap에 존재한다면, 접두어가 존재한다고 확인할 수 있다.
- 간단 예시에서는 "12"의 substring인 "1"을 추출한다.
- if jubdoo in hash_map
- String이라는 Key가 현재 hash_map에 존재하는지 확인하는 동작
'코딩테스트 > programmers (python)' 카테고리의 다른 글
Programmers / 2단계 / H-Index / python (0) | 2024.02.08 |
---|---|
Programmers / 2단계 / n^2 배열 자르기 / python (1) | 2024.02.07 |
Programmers / 2단계 / 할인 행사 / python (0) | 2024.02.06 |
★ Programmers / 2단계 / 괄호 회전하기 / python (0) | 2024.02.06 |
Programmers / 2단계 / 연속 부분 수열 합의 개수 / python (0) | 2024.02.06 |