해시를 이용하여 푸는 문제라고 되어있는데, 해시가 무엇인지 아직 정확히 모르므로, 내가 생각한 방식으로 풀었다.
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
안의 값들과 비교하면서 정답을 출력한다.
'알고리즘 테스트 > 프로그래머스 문제풀이 및 해설' 카테고리의 다른 글
<프로그래머스 문제풀이: [연습문제] 최솟값 만들기> Level 2 - 파이썬 (0) | 2020.12.16 |
---|---|
<프로그래머스 문제풀이: 올바른 괄호> Level 2 - 파이썬 (0) | 2020.12.14 |
<프로그래머스 문제풀이: [정렬] H-Index> Level 2 - 파이썬 (0) | 2020.12.12 |
<프로그래머스 문제풀이: [완전탐색] 소수 찾기> Level 2 - 파이썬 (0) | 2020.12.11 |
<프로그래머스 문제풀이: [스택/큐] 주식가격> Level 2 - 파이썬 (0) | 2020.12.10 |