IT/알고리즘
프로그래머스 전화번호 목록
어센트
2020. 6. 12. 16:11
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조��
programmers.co.kr
해시 문제로 분류되어 있었지만 보자마자 생각난 이중 for 문으로 문제를 풀고 실패하면 다른 방법을 생각해봐야지 했는데 테스트 케이스에 모두 성공했다.
풀이방법
- 배열을 sort()를 통해 정렬
- 이중 포문을 이용해 모든 경우의 수 비교하면서 replace()로 문자열하나를 다른 문자열 하나가 포함되어 있다면 "T"로 그 문자열을 바꿔줌
- 만약 T가 replace를 사용한 그 문자열에 포함되어있다면 return False
- 포문을 탈출하면 return True
다른 사람의 풀이를 보고 zip과 startwith()에 대해서 배웠다. 그리고 문자열을 길이 순서대로 정렬하고 싶다면 sort(key = len)을 이용하면된다는 것을 알게되었다.
내 풀이
def solution(phone_book):
phone_book.sort()
for i in range(len(phone_book)):
for j in range(i+1,len(phone_book)):
temp = phone_book[j].replace(phone_book[i],"T")
if(temp.find("T") > -1):
return False
return True
다른 사람 풀이
def solution(phoneBook):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
해시를 이용한 풀이
def solution(phone_book):
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):
return False
return True