반응형
programmers.co.kr/learn/courses/30/lessons/42577
문제는 풀었는데 다른사람이 파이썬 내장함수로 한줄로 푸는거 보고 충격... 정리 따로 해야겠다.
아이디어는 이렇다.
- 전화번호부로 set을 이용해 hash테이블을 만든다.
- 각번호를 순회하면서 이중포문을 통하여 번호의 부분문자열을 얻은뒤 hash 테이블에 있는지 확인한다.
- hashtable에 있다면 누군가의 접두어가 된다는 뜻이므로 False를 리턴한다
이렇게 하면 시간복잡도는 1000000*20 이 되므로 충분히 통과한다
def solution(phone_book):
mySet = set(phone_book)
for i in phone_book:
length = len(i)
for j in range(1,length):
if i[:j] in mySet:
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
반응형
'Python > 알고리즘문제' 카테고리의 다른 글
[프로그래머스][해시] 베스트앨범 (0) | 2021.03.17 |
---|---|
[프로그래머스][해시] 위장 (0) | 2021.03.17 |
[프로그래머스][스택/큐] 다리를 지나는 트럭 (0) | 2021.03.12 |
[프로그래머스][해시] 완주하지 못한 선수 (0) | 2021.03.12 |
[백준 1463] 1로 만들기 (0) | 2021.03.11 |
댓글