https://programmers.co.kr/learn/courses/30/lessons/42577
2가지 방법으로 풀었다.
sort
thenfor
:
- 정렬 후 1차원 반복문을 통해 1부터 시작하는
i
번째와i-1
번째의 번호 두개를 비교한다.
- 파이썬 메소드의
startswith
메소드를 사용해서 비교하면 편하게 할 수 있다.phone_book[i].startswith(phone_book[i-1])
인 경우phone_book[i]
가 `phone_book[i-1]
로 시작할 경우True
를 반환한다. 이때solution
함수에False
를 반환해 종료하면 된다.
- 2중 반복 안해도 됨? ->
sort
를 해줄경우 0번째가 2번째의prefix
라면 1번째도 해당되니 안해도 됨.phone_book[i].startswith(phone_book[i-1])
,phone_book[i-1].startswith(phone_book[i])
두개 동시에 비교 안해도 됨? ->
초반에sort
해놔서 안해도 됨.
def solution(phone_book):
answer = True
phone_book.sort()
for i in range(1,len(phone_book)):
if phone_book[i].startswith(phone_book[i-1]):
return False
return answer
hash
:
phone_book
리스트 전체를hash
에 넣는다.phone_book
의 번호 즉 아이템을 반복.
- 아이템의 숫자 한자리씩
temp
에 추가해가며 반복.
hash
에 존재하고 아이템 자기 자신이 아닐경우False
리턴.
def solution(phone_book):
answer = True
hash = {}
for item in phone_book:
hash[item] = 1
for item in phone_book:
temp = ''
for digit in item:
temp += digit
if temp in hash and temp != item:
answer = False
return answer
return answer
Algorithms / Programmers / 전화번호 목록