티스토리 뷰
#. Problem
* The copyright in this matter is in Programmers
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
#. Resolution Process
1. Read and understand problem
2. Redefine the problem + abstract
- 한 번호가 다른 번호의 접두어인 경우를 확인
3. Create solution plan (select Algorithm, Data structure)
- hash
4. Prove the plan (check performance time and usage memory)
5. Carry out the plan
6. Look back on the plan and find a way to improve it
#. Solve
1. 리스트의 한 요소씩 선택하여 다른 요소의 접두어(선택한 요소의 크기만큼)와 비교
2. 접두어로 포함되는 요소가 있을 경우(2개 이상의 요소가 중복) false, 아닐 경우 true를 반환
#. Code
1 2 3 4 5 6 7 8 9 | def solution(phone_book): for ph in phone_book: temp = list(map(lambda i:i[:len(ph)], phone_book)) count = temp.count(ph) if count >= 2: return False return True | cs |
#. Other code
1 2 3 4 5 6 7 | def solution(phoneBook): phoneBook = sorted(phoneBook, key=len) for ph1, ph2 in zip(phoneBook, phoneBook[1:]): if ph2.startswith(ph1): return False return True | cs |
- str.startswith()와 str.endswith() 메서드를 사용하여 문자열의 처음이나 마지막에 있는 텍스트를 매칭
'PS > Problem_Solving' 카테고리의 다른 글
[Programmers] Best album(hash).py (0) | 2020.01.03 |
---|---|
[Programmers] camouflage(hash).py (0) | 2020.01.02 |
[Programmers] A poor runner(hash).py (0) | 2020.01.01 |
[Algospot] QUADTREE (분할 정복) (0) | 2019.09.15 |
[Algospot] CLOCKSYNC (최적화) (0) | 2019.09.07 |