본문 바로가기

programmers

프로그래머스 [[PCCE 기출문제] 10번 / 데이터 분석](C++) -yes6686- 티스토리

728x90
반응형
SMALL

프로그래머스 문제 풀이: 250121 [데이터 필터링 및 정렬]


문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/250121

문제 설명:

주어진 2차원 벡터 data에서 특정 기준 ext를 사용하여 val_ext 미만의 데이터만 필터링한 후, 주어진 기준 sort_by에 따라 정렬하는 문제입니다.


문제 해결 코드


#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int sort_index; // 정렬 기준 인덱스

// 비교 함수 (사용자가 정한 열을 기준으로 정렬)
bool compare(vector<int>& a, vector<int>& b) {
    return a[sort_index] < b[sort_index];
}

vector<vector<int>> solution(vector<vector<int>> data, string ext, int val_ext, string sort_by) {
    vector<vector<int>> answer;

    // 필터링 (val_ext 미만의 데이터만 저장)
    for (int i = 0; i < data.size(); i++) {
        int value;
        if (ext == "code") value = data[i][0];
        else if (ext == "date") value = data[i][1];
        else if (ext == "maximum") value = data[i][2];
        else value = data[i][3]; // "remain"

        if (value < val_ext) {
            answer.push_back(data[i]);
        }
    }

    // 정렬 기준 인덱스 설정
    if (sort_by == "code") sort_index = 0;
    else if (sort_by == "date") sort_index = 1;
    else if (sort_by == "maximum") sort_index = 2;
    else sort_index = 3; // "remain"

    // 필터링된 데이터 정렬
    sort(answer.begin(), answer.end(), compare);

    return answer;
}

예제 입력:

data = [[100, 20230101, 50, 3], 
        [200, 20230102, 40, 5], 
        [300, 20230103, 30, 7]]
ext = "maximum"
val_ext = 50
sort_by = "date"

예제 출력:

[[300, 20230103, 30, 7], 
 [200, 20230102, 40, 5]]

코드 설명

  • 핵심 알고리즘: 데이터 필터링 후 정렬을 수행합니다.
  • 구현 세부사항:
    • 주어진 ext 기준으로 val_ext 미만의 데이터를 필터링합니다.
    • 정렬 기준 sort_by를 확인하고 정렬을 수행합니다.
    • 사용자 정의 비교 함수를 이용하여 정렬을 수행합니다.
  • 시간 복잡도: O(N log N), 정렬 연산이 가장 높은 복잡도를 가짐

결과

주어진 조건에 맞춰 데이터를 필터링하고 정렬하여 정확한 결과를 출력합니다. 조건 기반 필터링 및 정렬을 연습하기 좋은 문제입니다. 추가적인 질문이나 개선 사항이 있다면 댓글로 알려주세요!

728x90
반응형
LIST