CodingTest

[PCCE 기출문제] 10번 / 데이터 분석

흑조롱이 2024. 4. 3. 07:49

https://school.programmers.co.kr/learn/courses/30/lessons/250121

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 개요

 

주어지는 조건에 맞는 데이터들만 골라서, 정렬하는 문제이다.

 

해시테이블을 이용하면, 원하는 카테고리에 맞는 열 번호를 한번에 알아낼 수 있다.

 

 

알고리즘 및 풀이

1. 변수 정의

    ans = []           # 조건에 맞는 데이터 저장
    n = len(data)
    dct = {            # 기준에 대응하는 (열, 번호) 쌍을 보관하는 해시테이블
        "code" : 0,
        "date" : 1,
        "maximum" : 2,
        "remain" : 3,
    }

 

ans는 주어지는 data 중, 조건에 맞는 것들을 보관하는 list이다.

 

해시 테이블을 이용하여, 각 카테고리("code", "date", "maximum", "remain")가 가리키는 열의 번호를 지정해준다.

 

그러면 데이터를 살펴볼 때, ext에 해당되는 열에 바로 접근할 수 있다.

 

 

2. 조건에 맞는 데이터 확보

    for i in range(n):
        if data[i][dct[ext]] < val_ext:    # 카테고리 ext에 해당되는 값 중, 
            ans.append(data[i])            # val_ext보다 작은 데이터만 확보

 

 

i번째 데이터에서, dct[ext]번째 열의 값이 val_ext보다 작은 경우에만 ans에 추가한다.

 

해시테이블을 사용함으로써, 여러개의 if문을 사용해야 하는 수고를 덜 수 있다.

 

 

3. 확보한 데이터 정렬

    ans.sort(key = lambda x:x[dct[sort_by]])   # 원하는 열 기준, 오름차순 정렬
    return ans

 

sort와 lambda 함수를 이용하면, 원하는 열(dct[sort_by])을 기준으로 ans를 정렬할 수 있다.

 

여기서는 오름차순 정렬을 해야 하므로, lambda 함수의 x에 "-" 부호를 붙이지 않는다.

 

    ans.sort(key = lambda x:-x[dct[sort_by]])   # 원하는 열 기준, 내림차순 정렬

 

만약 내림차순 정렬을 하고싶다면, x[dct[sort_by]] 앞에 "-"기호를 붙이면 된다.

 

 

전체 코드

def solution(data, ext, val_ext, sort_by):
    ans = []           # 조건에 맞는 데이터 저장
    n = len(data)
    dct = {            # 기준에 대응하는 (열, 번호) 쌍을 보관하는 해시테이블
        "code" : 0,
        "date" : 1,
        "maximum" : 2,
        "remain" : 3,
    }

    for i in range(n):
        if data[i][dct[ext]] < val_ext:    # 카테고리 ext에 해당되는 값 중, 
            ans.append(data[i])            # val_ext보다 작은 데이터만 확보
    
    ans.sort(key = lambda x:x[dct[sort_by]])   # 원하는 열 기준, 오름차순 정렬
    return ans

 

 

채점 결과