해결 과정
1, 2, 3, 4가 있다고 가정하면, 1은 2~4에서, 2는 3~4에서.. 찾아보면 된다 생각해서 for 문 두 번 돌렸더니 효율성 테스트 실패가 떴다.
힌트를 보니 for문 두 번 돌리면 안되고 i번째랑 i+1번째만 비교하면 된다고? 이해 안돼서 혼자 다시 생각해봄. 최대 20자리 숫자니까, 모든 숫자를 20자리 숫자로(0 붙이기) 만들고, 그를 바탕으로 정렬하면 i번째랑 i+1번째만 비교해도 된다고 판단했다. 근데 이것도 19번 케이스에서 실패했다.
힌트를 더 살펴보니 문자열 자체를 sort하면 내가 원하는대로 sort가 된다고.. 그래서 그냥 sort 해보니 정답임
나의 풀이
[3차시도]
def solution(phone_book):
phone_book.sort()
for i in range(len(phone_book) - 1):
if phone_book[i] == phone_book[i + 1][0:len(phone_book[i])]:
return False
return True
[1차시도] 효율성 테스트 실패
더보기
def solution(phone_book):
phone_book.sort(key=lambda x: len(x))
for index, value in enumerate(phone_book):
for j in phone_book[index + 1:]:
if value == j[0:len(value)]:
return False
return True
[2차시도] 테스트 케이스 실패
더보기
def solution(phone_book):
phone_book.sort(key=lambda x: x.ljust(20, "0"))
for i in range(len(phone_book) - 1):
if phone_book[i] == phone_book[i + 1][0:len(phone_book[i])]:
return False
return True
다른 풀이
String.startswith() 메소드
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):
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
'Coding Test > 문제 풀이' 카테고리의 다른 글
[Algorithm] 가장 큰 수 (0) | 2021.12.30 |
---|---|
[Algorithm] K번째수 (0) | 2021.12.29 |
[Algorithm] 완주하지 못한 선수 (0) | 2021.12.29 |
[Algorithm] 단어변환 (0) | 2021.12.23 |
[Algorithm] 네트워크 (0) | 2021.12.22 |