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