<aside> 💬 lv0, 요구사항 구현

도서관 책 연도별 정렬

문제 설명

Untitled

라이캣은 도서관 사서로 일하게 되었습니다. 도서관에 있는 책들의 제목과 해당 책들의 발행 연도가 딕셔너리 형태로 주어집니다. 라이캣을 도와 주어진 책들을 발행 연도가 오래된 순서대로 정렬하는 코드를 작성해주세요. 발행 연도가 같은 경우에는 제목의 사전순으로 정렬하세요.


제한 사항


입출력 예

입력 출력
[['Moby Dick', 'To Kill a Mockingbird', '1984'], {'Moby Dick': 1851, 'To Kill a Mockingbird': 1960, '1984': 1949}] ['Moby Dick', '1984', 'To Kill a Mockingbird']

입출력 설명

입력으로 주어진 책들의 발행 연도는 다음과 같습니다: 'Moby Dick' - 1851, 'To Kill a Mockingbird' - 1960, '1984' - 1949. 이에 따라 발행 연도가 오래된 순서대로 정렬하면 'Moby Dick', '1984', 'To Kill a Mockingbird' 순이 됩니다.

</aside>

😺 풀이 1. key 파라미터 정렬

def solution(data): **#1 함수 정의**
    books, publish_years = data **#2 언패킹**
    return sorted(books, key=lambda book: (publish_years[book], book)) **#3 key값 정렬**

단계별 풀이 전략

  1. 함수 정의

    함수는 하나의 인자 data를 받습니다. data는 정렬할 도서의 제목 리스트와 제목과 연도가 함께 표기된 딕셔너리로 구성되어 있습니다.

  2. 언패킹

    입력받은 data를 언패킹하여 책 제목과 발행 연도로 분리합니다.

  3. key값 정렬

    언패킹된 data를 기반으로 lambda 함수를 key 값으로 활용하여 정렬합니다. publish_years[book] 은 딕셔너리에서 제목으로 찾은 발행 연도로 우선 정렬한다는 의미입니다. 만약, 발행 연도가 같다면, 제목을 사전 순으로 정렬합니다. sorted 함수를 사용하였습니다.

  4. 결과 반환

    최종적으로 정렬된 제목 리스트가 함수의 반환 값으로 지정됩니다.

알아둬야 할 개념

언패킹

풀이 2. get 메서드

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

단계별 풀이 전략

  1. 함수 정의

    함수는 하나의 인자 data를 받습니다. data는 정렬할 도서의 제목 리스트와 제목과 연도가 함께 표기된 딕셔너리로 구성되어 있습니다.

  2. 정렬 대상 및 기준 설정

    data에서 제목 리스트인 앞부분(data[0])을 정렬하며 그 기준은 딕셔너리 형태인 뒷부분(data[1])을 따르고 있습니다.

  3. key 값 정렬

    lambda 함수는 딕셔너리에서 제목 리스트의 원소들을 get 메서드로 찾고 있습니다. 만약, 발행 연도가 같다면, 제목을 사전 순으로 정렬합니다. sorted 함수를 사용하였습니다.

  4. 결과 반환

    최종적으로 정렬된 제목 리스트가 함수의 반환 값으로 지정됩니다.