https://programmers.co.kr/learn/courses/30/lessons/42577
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
내가 만든 코드 : [효율성 테스트에서 실패]
def solution(phone_book):
phone_book.sort()
while phone_book :
tmp = phone_book.pop(0)
for i in phone_book :
if i.startswith(tmp):
return False
return True
이 코드를 만들고 돌렸을 때 startswith가 실행되진않아 꽤 오래 찾아봤다.
startswith에 딱히 다른 조건은 없고 print 하여 비교하여도 차이는 찾을 수 없었다.
알고리즘 카톡방에 질문해서 그 답을 찾을 수 있었다.
tmp.startswith(i)로 했던 것이다.
비교하는 순서도 생각을 했어야 했는데 하지 않아 시작한는 단어임을 알수없었던것이다.
그래서 정확성 테스트는 통과했으나 효율성에서 3,4가 실패를 받았다.
정답 코드 :
def solution(phone_book):
phone_book.sort()
for p1, p2 in zip(phone_book, phone_book[1:]):
if p2.startswith(p1):
return False
return True
배운 점
1. zip 함수를 인수를 (phone_book)리스트로 주어서 for문을 돌릴 수 있다.
2. sort를 해서 바로 다음 숫자와만 비교하면 된다. <한번만 비교하면 된다.>
[ 문자열을 sort하면 맨 앞자리 문자순으로 (오름차순) 정렬됩니다.]
Phone = 119, 11952, 97674
Phone [1:0] = 11952, 97674
을 zip 하여 비교하므로 자신과 자신의 뒤 숫자가 비교되는 것이다.
3. 당연하게도 startswith 에 순서를 생각하자.
참고 블로그 :
https://chan123.tistory.com/221
복습 :
✅ 20220618
✅ 20220621
✅ 20220623
✅ 20220626
✅ 20220630
'알고리즘 > 프로그래머스문제풀이' 카테고리의 다른 글
[Python/프로그래머스]베스트앨범_해시 (0) | 2022.06.15 |
---|---|
[Python/프로그래머스]위장_해시 (0) | 2022.06.14 |
[Python/프로그래머스]완주하지 못한 선수 _해시 (0) | 2022.06.14 |
[Python/프로그래머스]입국심사 _이분탐색 (0) | 2022.06.14 |
[Python/프로그래머스]정수 삼각형 _DP (0) | 2022.06.14 |