- Today
- Total
hye-log
[프로그래머스]전화번호 목록(Python) 본문
0. 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42577
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
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스]할인 행사(Python) (0) | 2022.11.12 |
---|---|
[프로그래머스]베스트앨범(Python) (0) | 2022.11.09 |
[프로그래머스]체육복(Python) (0) | 2022.10.30 |
[프로그래머스]위장(Python) (0) | 2022.10.26 |
[프로그래머스]행렬의 곱셈(Python) (0) | 2022.10.24 |