코테 공부

[Python/해시] 전화번호 목록

prefer_all 2021. 8. 5. 20:44

문제:

함수 solution의 매개변수는 전화번호부인 phone_book

한 번호가 다른 번호의 접두어인 경우 false, 아닌 경우 true를 return

 

 

 내 답안

def solution(phone_book):
    phone_book.sort()
    answer = True
    
    for i in range (len(phone_book)-1):
            if phone_book[i] in phone_book[i+1] :
                if phone_book[i+1].find(phone_book[i]) == 0:
                    answer = False
                    break
    return answer

* sort() 함수 사용해서 list 안의 값을 이중 for문으로 전부 확인할 필요 없음

* .find() 함수: 문자열에서 찾고자 하는 문자열이 있는 경우, 시작 index 값 반환. 없는 경우 -1 값 반환.

  만약 find() 함수를 통해 접두어임을 확인하지 않으면 ["2", "32"]와 같은 테이스 케이스(13번 test case)에서 false 반환하는 문제 발생.

  in을 사용하면 생기는 문제이기도 함

 

 


다른 풀이

def solution(phoneBook):
    phoneBook = sorted(phoneBook)

    for p1, p2 in zip(phoneBook, phoneBook[1:]):
        if p2.startswith(p1):
            return False
    return True

* A.startswith(B) 함수

(참고) ["12345", "123"]을 sort할 경우 ["123", "12345"]로 됨

* A 문자열이 B 문자열을 포함하는 지 여부를 확인하려면 A.contains(B), B in A 등의 방법 사용

https://ddolcat.tistory.com/676

 

 

과정

>>> d= ["1","2","3","4","5","6","7","8"]
>>> def solution(phoneBook): 
>>>     for p in zip(phoneBook, phoneBook[1:]):
>>>         print(p)

solution(d)
...
...
('1', '2')
('2', '3')
('3', '4')
('4', '5')
('5', '6')
('6', '7')
('7', '8')

'코테 공부' 카테고리의 다른 글

[플로이드워셜] 이론/ 성능/ 예제/ python 구현  (0) 2021.08.11