CS/Algorithm 문제

[Programmers] 전화번호 목록

[Programmers] 전화번호 목록

 

🎈문제

https://programmers.co.kr/learn/courses/30/lessons/42577?language=python3 

💬설명

  • 전화번호 목록이 있을 때 임의의 전화번호가 다른 전화번호의 접두어인 경우가 있는지 체크하는 문제
  • 이중 for문을 이용해 풀어 줄 수도 있지만 "phone_book의 길이는 1 이상 1,000,000 이하입니다." 로 봐서 그렇게 하면 바로 효율성에서 틀릴 것 같았다.
  • 따라서 모든 전화번호를 파이썬의 dictionary에 넣어두고(N) 전화번호 하나씩 돌아가면서(N) 처음-i번째까지가 dictionary에 있는지 체크(최대 20)하는 방식으로 풀어줬다. 이렇게 하면 dictionary는 찾는게 O(1)밖에 안걸리기 때문에 N정도 밖에 걸리지 않는다.

👩‍💻코드

def solution(phone_book):
    hash_map = {}
    # 모든 전화번호 딕셔너리에 넣기
    for number in phone_book:
        hash_map[number] = 0
    # 모든 전화번호 돌면서 접두어 있는지 확인
    for number in phone_book:
        number_len = len(number)
        for i in range(1, number_len):
            if number[:i] in hash_map:
                return False
    return True

 

728x90
반응형

'CS > Algorithm 문제' 카테고리의 다른 글

[Programmers] 베스트앨범  (0) 2021.10.07
[Programmers] 위장  (0) 2021.10.07
[Programmers] 완주하지 못한 선수  (0) 2021.10.07
[BaekJoon] 백준 17471번 게리맨더링  (0) 2021.10.07
[BaekJoon] 백준 1949번 우수마을  (0) 2021.09.30