본문 바로가기

알고리즘풀이/프로그래머스

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

👉 사용 언어 : PYTHON3

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

✅ Solution

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

 

👉 문제 설명 및 제한 사항

  • 매개변수
    • data : ["코드 번호(code)", "제조일(date)", "최대 수량(maximum)", "현재 수량(remain)"]
      • 1 <= 길이 <= 500
      • 1 <= code 번호 <= 100,000
      • 20000101 <= date <= 29991231
      • 1 <= maximum <= 10,000
      • 1 <= remain <= maximum
    • ext : 떤 정보를 기준으로 데이터를 뽑아낼지를 의미하는 문자열
      • "code", "date", "maximum", "remain" 중 하나
    • val_ext : 뽑아낼 정보의 기준값을 나타내는 정수
      • ext에 따라 올바른 범위의 숫자
    • sort_by : 정보를 정렬할 기준이 되는 문자열
      • "code", "date", "maximum", "remain" 중 하나
  • 리턴값 : data에서 ext 값 < val_ext 인 데이터만 뽑아낸 후, sort_by 값을 기준으로 오름차순 정렬한 값 (이중 리스트)
    • 정렬 기준에 해당하는 값이 서로 같은 경우는 다.

👉 아이디어

  • 각 데이터 구성 값 ("code", "date", "maximum", "remain")을 key 로, 인덱스값 (0~3)을 value 로 한 딕셔너리를 생성한다.
  • 반복문을 돌려 data에서 원소를 차례대로 뽑아 해당 원소의 ext에 해당하는 값이 val_ext보다 작은 경우, 정답 배열에 원소(리스트)를 추가한다.
  • sort_by에 해당하는 값을 기준으로 정답 배열 원소(리스트)를 정렬한 후, 반환한다.
    • sort()의 key 속성을 사용하여 정렬 기준을 지정한다.
    • sort(key=lambda x : (x[dict[sort_by]]))
    • lamda x : (x[0]) > 인덱스가 0인 원소를 기준으로 정렬하겠다는 의미❗️

✅ 특정 기준으로 배열 정렬하기 (key=lamda)

 

✔️ key 가 하나일 때

(EX) x를 기준으로 정렬하기 (일반 오름차순)

arr = ['abc', 'bac', 'bca']
sorted(arr, key=lambda x : x)

 

(EX) arr 에 속하는 각 원소들을 x 라고 생각했을 때, x[0]를 기준으로 정렬하기

arr = ['abc', 'bac', 'bca']
sorted(arr, key=lambda x : x[0])

 

✔️ key 가 여러 개일 때

(EX) x[0]를 기준으로 정렬하고 같을 경우 x[1]를 기준으로 정렬하기

arr = ['abb', 'acc', 'bcd']
sorted(arr, key=lambda x : (x[0], x[1]))

 

✔️ 내림차순 정렬

(EX) x[0]는 내림차순, x[1]는 오름차순을 기준으로 정렬하기

arr = ['abb', 'acc', 'bcd']
sorted(arr, key=lambda x : (-x[0], x[1]))

 

 다른 사람 풀이 참고

def solution(data, ext, val_ext, sort_by):
    answer = []
    by = [ "code", "date", "maximum", "remain" ]

    for item in data:
        if item[by.index(ext)] < val_ext:
            answer.append(item)

    return sorted(answer, key=lambda x: x[by.index(sort_by)])

 

👉 깨달은 것 / 알게된 것

  • 딕셔너리 사용하지 않고 배열에 저장하여 풀이할 수 있다.
    • 위에서 풀이한 딕셔너리 value가 key값의 인덱스이므로!
    • .index()를 사용하여 dict[key]와 동일한 결과를 낼 수 있다.

 

'알고리즘풀이 > 프로그래머스' 카테고리의 다른 글

[Lv2.] 짝지어 제거하기  (0) 2024.02.28
[2/22] 기출문제 풀이  (0) 2024.02.20
[2/18] Kakao Internship 기출문제 풀이  (0) 2024.02.15
하노이의 탑  (2) 2024.02.11
[2/10] 기출문제 풀이  (0) 2024.02.08