본문 바로가기
Problem Solving/Programmers

[Sorting] Python 42577 전화번호 목록

by Bokoo14 2023. 4. 18.

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

 

프로그래머스

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

programmers.co.kr

# 2023.04.18

def solution(phone_book):
    answer = True # 접두어가 없으면 true
    phone_book.sort()
    
    length = len(phone_book)

    for i in range(length - 1):
        if phone_book[i] == phone_book[i + 1][:len(phone_book[i])]:
            answer = False
            break
    return answer

#solution(["119", "97674223", "1195524421"])
#solution(["12","123","1235","567","88"])

solution(["1", "12312", "1234", "23", "234", "256", "2", "1232", "36", "3", "32"])

Key Point!

파이썬은 문자열을 정렬을 할때 ASCII값을 기준으로 정렬을 한다.

문자열의 첫 번째 글자부터 ASCII값으로 비교하면서 정렬을 수행한다.

 

만약, 숫자를 정렬하고 싶다면, sort()메소드의 key인자를 활용하여 정렬 기준을 지정할 수 있음.

solution(["1", "12312", "1234", "23", "234", "256", "2", "1232", "36", "3", "32"], key=int) 와 같이 key인자에 int함수를 넣으면 숫자로 정렬을 할 수 있음

 

 

예를 들어 123과 1234를 비교할 때는 123의 4번째에는 숫자가 없으니 123이 먼저 와야 한다

왜?

아스키 값으로 비교할 때, 먼저 비교되는 문자열의 문자가 같다면 그 다음 문자를 비교하여 정렬

만약, 비교하는 두 문자열의 길이가 다른 경우에는, 짧은 문자열이 긴 문자열의 앞에 위치하게 된다.

이때, 짧은 문자열의 마지막 문자 다음에는 null문자('\0')가 삽입되어서 비교가 수행된다. NULL문자의 ASCII값은 0이기 때문에, null문자 다음에 오는 문자열은 무조건 뒤쪽으로 정렬되게 된다.