문제:
함수 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 |
---|