티스토리 뷰

반응형

#. 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
  - sorted로 리스트 정렬 시 key 옵션이 가능

  - 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
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday