<aside> 💬 lv0, 정렬

우편 번호 정렬

문제 설명

각 주소가 담긴 배열과 우편번호 목록이 딕셔너리 형태로 주어질 때 에서 우편번호 오름차순 순서대로 주소를 정렬하는 코드를 작성해주세요.


제한 사항


입출력 예

입력 출력
[['제주시 A동 한라산길 61', '제주시 B동 백록담길 63', '제주시 C동 사라봉길 31'], {'A동': 63007, 'B동': 63010, 'C동': 63002}] ['제주시 C동 사라봉길 31', '제주시 A동 한라산길 61', '제주시 B동 백록담길 63']

입출력 설명

['제주시 A동 한라산길 61', '제주시 B동 백록담길 63', '제주시 C동 사라봉길 31']에서 각각의 우편변호는 63007, 63010, 63002입니다. 따라서 우편 번호 오름차순으로 정렬을 하면 63002, 63007, 63010으로 정렬을 해야 하고, 이는 C동, B동, A동입니다. 따라서 결과 값은 ['제주시 C동 사라봉길 31', '제주시 A동 한라산길 61', '제주시 B동 백록담길 63']이 되어야 합니다.

</aside>

😺 풀이 1. split 함수

def solution(data):
    return sorted(data[0], key=lambda x: data[1][x.split()[1]]) **#1 정렬 #2 split() 함수**

단계별 풀이 전략

  1. data의 첫 번째 요소를 정렬

  2. split() 함수

    정렬 기준은 해당 요소를 분리한 후, 두 번째 리스트에서 해당 인덱스의 값을 사용해야 합니다.

알아둬야 할 개념

split 함수

풀이 2. enumerate

def solution(data):
    key2idx = {idx:val for idx, val in enumerate(data[1].values())}  **#1 딕셔너리 컴프리헨션**
    rearranged = sorted(key2idx.items(), key=lambda x: x[1])  **#2 리스트 정렬**
    res = [data[0][i] for i, _ in rearranged]
    return res

단계별 풀이 전략

  1. 딕셔너리 컴프리헨션

    data의 두 번째 리스트를 기반으로 각 요소와 그에 해당하는 인덱스를 딕셔너리 형태로 저장합니다. 이때, 인덱스는 해당 요소의 값으로, 값은 해당 요소의 인덱스로 매핑됩니다. 이 과정에서 딕셔너리 컴프리헨션을 사용합니다.

  2. 리스트 정렬

    딕셔너리를 생성한 후, 인덱스와 값을 서로 뒤집어 정렬하기 쉽게 만듭니다. 이를 위해 딕셔너리의 아이템을 튜플 형태로 뒤집어 리스트로 변환하고, 이 리스트를 sorted() 함수를 사용하여 값에 따라 정렬합니다. 여기서는 뒤집은 값이 정렬 기준이 됩니다.

알아둬야 할 개념

enumerate 함수