[프로그래머스] 해시 - 전화번호 목록 (파이썬)
- 프로그래밍/프로그래머스
- 2020. 4. 26. 21:23
반응형
프로그래머스 해시 - 전화번호 목록, 문제 확인
문제 설명은 아래와 같다.
한 전화번호가 다른 번호의 접두어인 경우가 있는지 확인하려 함
구조대 전화번호가 119, 지영석의 전화번호가 11 9552 4421일 때, 구조대 전화번호는 지영석 전화번호의 접두사임
phone_book은 전화번호를 담은 배열
접두어인 경우가 있으면 flase, 아니면 true를 반환
프로그래머스 해시 - 전화번호 목록, 문제 풀이 (파이썬)
일단 같은 인덱스인 경우는 스킵하고 더 짧은 값을 찾아낸 후 각 값을 더 짧은 길이만큼으로 잘랐을 때, 포함되는 관계가 있는지 확인하는 방식을 사용했다.
def solution(phone_book):
for i,k in enumerate(phone_book):
for i_,k_ in enumerate(phone_book):
if i==i_: continue
# 더 짧은 값을 찾아냄
if len(k)>len(k_): minlen=len(k_)
else: minlen=len(k)
# 포함되는 관계인지 확인
if k[:minlen] in k_[:minlen]:
return False
return True
별로 잘푼 문제인 것 같지는 않다. 이중 반복문을 돌기때문에 시간 비효율적이다ㅠㅠ
프로그래머스 해시 - 전화번호 목록, 다른 사람의 풀이
다른 사람의 풀이를 살펴보니, ZIP을 사용한 풀이가 있다.
def solution(phoneBook):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
난 위 풀이를 보고 아래와 같은 반복이 가능하다는 것을 처음 알았다ㅋㅋ zip을 사용하면 굳이 반복문을 2중으로 돌 필요가 없는 것이다. 그리고 startswith는 문자열이 특정문자로 시작하는지 여부를 알려주기 때문에 p2에 p1 값이 들어가있는지 확인할 수 있다.
'프로그래밍 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 스택/큐 - 다리를 지나는 트럭 (파이썬) (0) | 2020.04.29 |
---|---|
[프로그래머스] 스택/큐 - 탑 (파이썬) (0) | 2020.04.29 |
[프로그래머스] 해시 - 베스트앨범 (파이썬) (0) | 2020.04.28 |
[프로그래머스] 해시 - 위장 (파이썬) (0) | 2020.04.27 |
[프로그래머스] 해시 - 완주하지 못한 선수 (파이썬) (0) | 2020.04.24 |