본문 바로가기
Sketch (Programming Language)/Python

프로그래머스 - 데이터 분석

by 생각하는 이상훈 2024. 5. 14.
728x90

문제

AI 엔지니어인 현식이는 데이터를 분석하는 작업을 진행하고 있습니다. 데이터는 ["코드 번호(code)", "제조일(date)", "최대 수량(maximum)", "현재 수량(remain)"]으로 구성되어 있으며 현식이는 이 데이터들 중 조건을 만족하는 데이터만 뽑아서 정렬하려 합니다.

예를 들어 다음과 같이 데이터가 주어진다면

data = [[1, 20300104, 100, 80], [2, 20300804, 847, 37], [3, 20300401, 10, 8]]

이 데이터는 다음 표처럼 나타낼 수 있습니다.

주어진 데이터 중 "제조일이 20300501 이전인 물건들을 현재 수량이 적은 순서"로 정렬해야 한다면 조건에 맞게 가공된 데이터는 다음과 같습니다.

data = [[3,20300401,10,8],[1,20300104,100,80]]

정렬한 데이터들이 담긴 이차원 정수 리스트 data와 어떤 정보를 기준으로 데이터를 뽑아낼지를 의미하는 문자열 ext, 뽑아낼 정보의 기준값을 나타내는 정수 val_ext, 정보를 정렬할 기준이 되는 문자열 sort_by가 주어집니다.

data에서 ext 값이 val_ext보다 작은 데이터만 뽑은 후, sort_by에 해당하는 값을 기준으로 오름차순으로 정렬하여 return 하도록 solution 함수를 완성해 주세요. 단, 조건을 만족하는 데이터는 항상 한 개 이상 존재합니다.

 

입출력 예시


풀이

def solution(data, ext, val_ext, sort_by):
    # 리스트 인덱스를 특정하기 위한 dictionary 선언
    dict = {'code':0, 'date':1, 'maximum':2, 'remain':3}
    # ext에 해당하는 인덱스를 기준으로 val_ext보다 작은 값을 가진 리스트만 남김
    filtered = [item for item in data if item[dict[ext]] < val_ext]
    # sort_by에 해당하는 인덱스를 기준으로 오름차순 정렬
    answer = filtered.sort(key=lambda x: x[dict[sort_by]])
    return answer

주석에서 거의다 설명이 되어있다. 핵심 내용을 살펴보면 filtering과 sorting의 기준을 텍스트로 입력받기 때문에 해당 텍스트가 어떤 인덱스를 의미하는지 지정해주기 위한 dictionary를 선언해줘야한다. filtering과 sorting 과정 모두 직접 작성해보지 못했던 내 관점에서는 고수(?)들이 쓰는 방법이 떠올라서 문법을 찾아서 풀어봤다.

filtering에서는 data중 특정 인덱스의 아이템들을 기준과 비교하여 더 적을때만 filtered 리스트에 담기는 item으로 지정해준다.

sorting에서는 lambda형식을 이용하여 특정 인덱스를 기준으로 sorting을 한다.


728x90