전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.구조대 : 119
박준영 : 97 674 223
지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.제한사항
- phone_book의 길이는 1 이상 1,000,000 이하입니다.
- 각 전화번호의 길이는 1 이상 20 이하입니다.
입출력 예
phone_book return [119, 97674223, 1195524421] false [123,456,789] true [12,123,1235,567,88] false
나의 생각의 흐름을 주절주절..
문자열 정렬에 대해서 생각해볼 수 있는 문제였다.
한 번호가 다른 번호의 접두어이면,
오름차순으로 정렬했을 때 두 문자열은 반드시 연속적으로 나타날 것이다.
내가 생각한 예시로는
"123", "124", "1234"
와"123", "124", "1254"
뭐 이런게 있었는데,첫 번째 경우는 오름차순으로 정렬하게 되면
"123", "1234", "124"
이고,
두 번째 경우는
"123", "124", "1254"
이 되므로한 문자열이 다른 문자열의 접두어이면
오름차순으로 정렬했을 때 두 문자열은 반드시 연속적으로 나타난다.
결론
주어진 phone_book 리스트를 오름차순으로 정렬한 후에
인접해있는 문자열들을 확인해주면 되는데,
오름차순이기 때문에, 먼저 오는 문자열(i)이
두 번째 문자열(i+1)에서 접두어인지 확인한다.두 번째 문자열에서 처음부터 먼저 오는 문자열의 길이만큼 자른 뒤
먼저 오는 문자열과 비교하면 된다 !!
def solution(phone_book): answer = True phone_book.sort() for i in range(0, len(phone_book)-1): if phone_book[i] == phone_book[i + 1][:len(phone_book[i])]: answer = False return answer