코딩 문제 풀이

[정렬/C++] K번째수

JIonI 2020. 8. 1. 19:33

문제

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구한다.

입출력 예시

[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.

[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.

[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.

코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(int a, int b){
    return a < b;
}

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    int start, end, k = 0;
    for(int i=0; i<commands.size(); i++){
        vector<int> temp;  // 자른 배열을 저장하는 변수
        start = commands[i][0] - 1;
        end = commands[i][1] - 1;
        k = commands[i][2] - 1;
        temp.resize(end-start+1);
        // 배열을 잘라서 temp에 복사
        copy(array.begin() + start, array.begin()+end+1, temp.begin());
    
        if(start == end){
            answer.push_back(array[start]);
        }
        else{ // 정렬 후 answer 배열에 k번째 요소 추가
            sort(temp.begin(), temp.end());
            answer.push_back(temp[k]);
        }
    }
    
    return answer;
}

 

 

 

문제 출처: 프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/42748?language=cpp