Python/[프로그래머스]

[프로그래머스][Level 2] 전화번호 목록

hyunnn_00 2023. 8. 19. 17:46
문제 설명

 

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.

  • 구조대 : 119
  • 박준영 : 97 674 223
  • 지영석 : 11 9552 4421

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

 

제한 사항

  • phone_book의 길이는 1 이상 1,000,000 이하입니다.
    • 각 전화번호의 길이는 1 이상 20 이하입니다.
    • 같은 전화번호가 중복해서 들어있지 않습니다.

 

예시

 

풀이

 

# 풀이1
def solution(phone_book):
    phone_book.sort()
    for i in range(len(phone_book)):
        if phone_book[i].startswith(phone_book[i-1]):
            return False
    return True

1. phone_book를 정렬하여 비슷한 번호가 인접하게 한다.

2. phone_book에 있는 리스트를 순회하면서 i번째 전화번호가 i-1번째 전화번호로 시작하면 False를 리턴, 그 외에는 True를 리턴한다.

 

# 풀이2
def solution(phoneBook):
    phoneBook = sorted(phoneBook)

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

1. phone_book을 정렬한다.

2. zip 함수를 사용하여 인접한 전화번호 쌍을 비교한다.

zip(phone_book, phone_book[1: ])를 사용하여 phone_book과 phone_book의 두 번째 요소부터 시작하는 리스트를 묶어서 순서쌍을 생성한다. => 인접한 전화번호 쌍이 만들어짐

3. for문을 이용하여 순서쌍을 하나씩 가져와서 현재 번호 p1이 다음 번호 p2의 접두어인지 판별한다.

4. 접두어이면 False 반환, 그 외에는 True 반환