<aside> 💬 lv0, 정렬

주간 최고 온도 기록 분석

문제 설명

일주일 동안의 최고 기온이 기록된 데이터가 주어집니다. 이 데이터에서 가장 높은 온도를 기록한 상위 3일을 찾아 'YY-MM-DD: 온도' 형식으로 반환하는 코드를 작성해주세요. 데이터는 'YYYY-MM-DD' 형식의 날짜와 해당 날짜의 최고 온도(섭씨)로 구성됩니다.


제한 사항


입출력 예

입력 (기온 데이터) 출력 (상위 3일의 기온)
{'2024-01-01': 15, '2024-01-02': 17, '2024-01-03': 16, '2024-01-04': 20, '2024-01-05': 19, '2024-01-06': 21, '2024-01-07': 18} ['24-01-06: 21', '24-01-04: 20', '24-01-05: 19']

입출력 설명

주어진 일주일 동안의 최고 기온 데이터에서 가장 높은 온도를 기록한 상위 3일을 'YY-MM-DD: 온도' 형식으로 반환합니다. 예를 들어, 가장 높은 기온을 기록한 날은 '2024-01-06'로 21도였으며, 그 다음은 '2024-01-04'의 20도, '2024-01-05'의 19도입니다.

</aside>

😺 풀이 1. lambda 함수

def solution(temperature_data): **#1 함수 정의**
    temp_list = [(temp, date) for date, temp in temperature_data.items()] **#2 형식 변환**
    temp_list.sort(key=lambda x: (-x[0], x[1])) **#3 정렬**
    top_three = temp_list[:3] **#4 요구사항 반영**
    return [f"{date[2:]}: {temp}" for temp, date in top_three] **#5 결과 반환**

단계별 풀이 전략

  1. 함수 정의

    코드의 첫 부분에서 solution이라는 함수를 정의합니다. 이 함수는 하나의 인자 temperature_data를 받습니다. temperature_data는 날짜와 최고 온도로 구성된 딕셔너리입니다.

  2. 형식 변환

    온도 데이터를 (온도, 날짜) 형식의 튜플 리스트로 변환합니다.

  3. 정렬

    두 가지 기준으로 정렬됩니다. 첫 번째 기준은 온도(x[0])로, 높은 온도부터 낮은 온도 순으로 정렬됩니다. 이를 위해 -x[0]를 사용하여 온도 값을 음수로 변환합니다. 두 번째 기준은 날짜(x[1])로, 오름차순으로 정렬됩니다. 온도가 같은 경우 날짜를 기준으로 정렬한다는 의미입니다.

  4. 요구사항 반영

    정렬된 리스트에서 가장 앞에 있는 3개의 요소를 슬라이싱하여 top_three에 저장합니다. 이는 가장 높은 온도를 가진 3개의 날짜를 선택하는 것과 같습니다.

  5. 결과 반환

    top_three에 저장된 각 날짜와 온도를 'YY-MM-DD: 온도' 형식으로 변환합니다. 이때, 날짜의 연도 부분은 처음 두 글자를 제외하고 변환합니다.

알아둬야 할 개념

튜플 정렬

풀이 2. 조건문

def solution(data): **#1 함수 정의**
    if 7 <= len(data) <= 30: **#2 조건문**
        sorted_tmp = sorted(data.items(), key = lambda x:x[1], reverse=True) **#3 정렬**
        top3_list = [f'{day}: {tmp}' for day, tmp in sorted_tmp][:3] **#4 문자열 변환**
        **#5 문자열 슬라이싱**
        changed_str = []
        for x in top3_list:
            x = x[2:]
            changed_str.append(x)
        return changed_str **#6 결과 반환**
    else: 
        msg ='잘못 입력하셨습니다. 기온 데이터를 최소 7개에서 최대 30개까지 입력해주세요.'
        return msg

단계별 풀이 전략

  1. 함수 정의

    코드의 첫 부분에서 solution이라는 함수를 정의합니다. 이 함수는 하나의 인자 data를 받습니다. data는 날짜와 최고 온도로 구성된 딕셔너리입니다.

  2. 조건문

    입력받은 data의 길이가 7 이상 30 이하인지 확인합니다. 조건에 맞지 않으면 에러 메세지를 반환합니다.

  3. 정렬

    data의 아이템을 value 값(최고 온도) 기준으로 내림차순 정렬합니다.