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
'programmers' 카테고리의 다른 글
프로그래머스 [연습문제 / 대충 만든 자판](C++) -yes6686- 티스토리 (0) | 2025.02.10 |
---|---|
프로그래머스 [연습문제 / 덧칠하기](C++) -yes6686- 티스토리 (0) | 2025.02.08 |
프로그래머스 [[PCCE 기출문제] 9번 / 이웃한 칸](C++) -yes6686- 티스토리 (0) | 2025.02.07 |
프로그래머스 [연습문제 / 공원 산책](C++) -yes6686- 티스토리 (1) | 2025.02.06 |
프로그래머스 [연습문제 / 추억 점수](C++) -yes6686- 티스토리 (0) | 2025.02.05 |