본문 바로가기
공부-코딩테스트/코테풀이 - 자바, 파이썬

전화번호 목록 (코딩테스트, 프로그래머스)

by 령과 2022. 2. 17.

문제

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

 

코딩테스트 연습 - 전화번호 목록

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

programmers.co.kr

나의 코드

def solution(phone_book):
    phone_book=sorted(phone_book)
    for i in range(len(phone_book)-1):
        if phone_book[i]==phone_book[i+1][:len(phone_book[i])]:
            return False
    return True

요소들이 문자열로 이루어져있으면 정렬하면 사전처럼 정렬된다. 

위 문제처럼 한 번호가 다른 번호의 접두어인 경우 정렬을 한다면 반드시 이웃될 것이라 생각하였다.

이웃되는 요소들끼리 비교하는데 짧은 번호가 긴 번호에 속하며 속할 때 맨 앞부분부터 일치해야 된다.

정렬을 하였기 때문에 접두어가 될 경우 짧은 번호가 앞에 위치에 있을 것이기 때문에 i번째 문자열 길이만큼

i+1번째 문자열을 자르고 같은지 확인하는 식으로 문제를 해결하였다.

 

알게된 점

1. 리스트 슬라이싱할 때는 범위가 넘어가도 오류가 뜨지 않는다.

2. 오랜만에 sorted를 사용했는데 key를 사용하는 방법을 잊고있어서 정리하게 되었다.

 

댓글