
def solution(phone_book): for i in range(len(phone_book)): for j in range(len(phone_book)): if i!= j: if phone_book[i]+phone_book[j][len(phone_book[i]):] == phone_book[j]: return False break else: return True
효율성도 나쁘지 않고, 정확성도 다 맞는 풀이 방법이라 다른 사람의 풀이를 한번 보기로 했다.
다른 사람의 풀이
프로그래머스에서 가장 많은 좋아요를 받은 문제풀이이다
def solution(phoneBook): phoneBook = sorted(phoneBook) for p1, p2 in zip(phoneBook, phoneBook[1:]): if p2.startswith(p1): return False return True
이 사람은 sorted()
함수를 통해 문자열들을 순서대로 정렬을 시킨 후, 가장 인접한 두 숫자들을 검사를 해주는 것이다. 이때, 이 문제를 푼 사람은 startswith()
함수를 사용하였는데, startswith()
는 문자열이 특정문자로 시작하는지 여부를 알려준다. 두번째 인자를 넣음으로써 찾기 시작할 지점을 정할수있다.(여기서는 두번쨰 인자를 넣지 않음)
>>> s = '가나다라 마바사아 자차카타 파하' >>> s.startswith('마',5) True
이런식으로 사용하게 된다.
문제는 해시를 사용하여 푸는 것이라고 되어 있는데, 딕셔너리를 사용하여 푸는 것이다. 이렇게 푸는 것은 다음과 같다:
def solution(phone_book): answer = True hash_map = {} 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 return answer
해시에 phone_book
의 값들을 각각 저장 시켜주고, temp=''
라는 빈 문자열을 정의해주고, 이에 따라 temp
를 새롭게 정의해주고 has_map
안의 값들과 비교하면서 정답을 출력한다.