hye-log

[프로그래머스]전화번호 목록(Python) 본문

CodingTest/Programmers

[프로그래머스]전화번호 목록(Python)

iihye_ 2022. 11. 6. 19:17

0. 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42577

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 설명

1) 어떤 번호가 다른 번호의 접두어인 경우가 있으면 False, 없으면 True return

 

2. 입출력

# input
phone_book = ["119", "97674223", "1195524421"]

# output
return = False

 

3. 코드

1) 배열의 index를 이용하여 풀이

def solution(phone_book):
    answer = True

    phone_book.sort()                           # 양옆을 비교하므로 정렬 후 비교
    for i in range(len(phone_book) - 1):
        if phone_book[i] == phone_book[i+1][:len(phone_book[i])]:
            answer = False

    return answer

실행 결과

 

2) startswith 함수를 이용하여 풀이

def solution(phone_book):
    answer = True

    phone_book.sort()                           # 양옆을 비교하므로 정렬 후 비교
    for i in range(len(phone_book) - 1):
        if phone_book[i+1].startswith(phone_book[i]):
            answer = False

    return answer

실행 결과

 

4. 회고

이 문제는 주어진 전화번호를 비교해서 접두사가 같으면 False, 다르면 True를 return 하는 문제이다. 처음에는 첫 번째 요소를 기준으로 같은 접두사를 가진 전화번호를 찾는 문제인줄 알고 첫 번째 요소를 따로 저장한 후 리스트에서 삭제하여 나머지를 정렬하는 방법을 사용했었다(완전히 문제를 잘못 이해하고 있었음;;) 그래서 요소들을 모두 정렬한 다음에 양 옆의 요소들을 비교하면서 접두사가 같은 전화번호가 있는지 찾는 방식으로 문제를 해결하였다. 문제는 배열의 index를 이용해서 두 배열의 접두사가 같은지를 확인했는데, 다른 사람의 풀이를 보니 startswith 함수를 이용해서도 풀었길래 코드를 바꾸어봤다. 두 가지를 모두 실행시켜보니까 배열의 index를 이용하는 방법이 효율성 테스트에서 효율적이라고 판단했다. startswith 보다는 비교할 배열의 개수를 아는 경우에는 배열의 index를 이용하는 것이 더 좋을 것이라고 생각한다.

 

5. Github

https://github.com/iihye/Algorithm/blob/main/Programmers/phone_number.py

 

GitHub - iihye/Algorithm

Contribute to iihye/Algorithm development by creating an account on GitHub.

github.com

 

728x90
Comments