<aside> 💡

어떻게 sort할 것인지가 관건

</aside>

1. 내가 작성한 코드

def solution(data, ext, val_ext, sort_by):
    answer = []
    
    for i in data:
        if ext == "code":
            if i[0] < val_ext:
                answer.append(i)
        elif ext == "date":
            if i[1] < val_ext:
                answer.append(i)
        elif ext == "maximum":
            if i[2] < val_ext:
                answer.append(i)
        elif ext == "remain":
            if i[3] < val_ext:
                answer.append(i)
            
    if sort_by == "remain":
        answer.sort(key=lambda t:t[3])
    elif sort_by == "maximum":
        answer.sort(key=lambda t:t[2])
    elif sort_by == "date":
        answer.sort(key=lambda t:t[1])
    elif sort_by == "code":
        answer.sort(key=lambda t:t[0])

    return answer

2. 핵심 아이디어

  1. data만큼의 반복문을 돌아준다
  2. data내부의 정보는 [code, data, maximum, remain]순이므로 data안에 있는 각 배열의 순대로 if문을 돌려준다.
  3. 그리고 정렬기준을 문자열로 받으면 해당 정렬기준대로 lambda 함수를 통해 정렬해준다.
  4. answer.sort(key=lambda t:t[3]) 원하는 키 값으로 정렬 = 즉 배열의 3번째 인덱스를 기준으로 오름차순으로 정렬하겠다는 의미

3. 보완할 점


def solution(data, ext, val_ext, sort_by):
    std_dic = {'code':0, 'date':1, 'maximum':2, 'remain':3}
    answer = []

    for dt in data:
        if dt[std_dic[ext]] < val_ext:
            answer.append(dt)

    answer.sort(key = lambda x:x[std_dic[sort_by]])

    return answer

딕셔너리 사용해서 깔끔하게 풀었다 . . .

내 코드는 너무 if문 남발이라 ㅠ 가독성 떨어짐