42577 | 전화번호 목록 | Lv.2
https://programmers.co.kr/learn/courses/30/lessons/42577


작성 코드
def solution(phone_book):
answer = True
phone_book.sort()
for idx1, pb1 in enumerate(phone_book):
for idx2 in range(idx1 + 1, len(phone_book)):
if pb1 == phone_book[idx2][:len(pb1)]:
answer = False
return answer
- sort 한 후 for 문 두 번 도느라 시간 초과
이상 코드
index 비교
def solution(phone_book):
answer = True
phone_book.sort()
for idx in range(len(phone_book) - 1):
if phone_book[idx + 1][:len(phone_book[idx])] == phone_book[idx]:
return False
return answer
- phone_book 배열 내 원소의 자료형이 정수가 아닌 문자열 + 중복이 없기 때문에 정렬을 했을 때 사전순 배열 -> 바로 뒤 원소와 비교하면 됩니다
- 만약 배열 내 원소의 자료형이 정수형이더라도 map을 통해 문자열로 변환해주었으면 해결됐을 것
startwith 함수 사용
def solution(phone_book):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
- zip 은 두 배열의 길이가 달라도 사용 가능, 짧은 쪽에 길이 맞춤
- startiwith 를 사용하면 True, False 값 return
해시 함수 사용
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
- 딕셔너리는 in 연산을 수행할 때 배열보다 효율적
- temp != phone_number 조건을 잘 생각해내기
학습
- 자료형도 hint일 수 있으니 대충 넘기지 말 것
- zip 은 배열의 길이가 달라도 사용 가능
- startwith 함수의 사용
반응형
'Algorithm > programmers' 카테고리의 다른 글
| [프로그래머스] 62048 | 멀쩡한 사각형 (0) | 2022.02.08 |
|---|---|
| [프로그래머스] 42579 | 베스트앨범 (0) | 2022.01.18 |
| [프로그래머스] 42578 | 위장 (0) | 2022.01.17 |
| [프로그래머스] 68935 | 3진법 뒤집기 (0) | 2022.01.11 |
| [프로그래머스] 42576 | 완주하지 못한 선수 (0) | 2022.01.05 |
댓글