본문 바로가기

컴퓨터공학

[프로그래머스/C++] K번째수

반응형

https://programmers.co.kr/learn/courses/30/lessons/42748

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

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

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    vector<int> temp;
    for(int i=0; i<commands.size();i++){
        for (int j=commands[i][0]-1; j<commands[i][1];j++ ){
            temp.push_back(array[j]);
        }
        
        sort(temp.begin(),temp.end());
        answer.push_back(temp[commands[i][2]-1]);
        temp.clear();
        
    }
    return answer;
}

 

vector의 정렬문제이다. 처음에는 이중 for문을 사용하여 해결하였다. for문을 하나 더 돌려서 temp에 저장하지 말고 해당 array에서 정렬할 부분에서만 정렬을 해줄 수 있다. 아래와 같이 만들면 단일 for문으로도 가능하다.

 

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

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    vector<int> temp;

    for(int i = 0; i < commands.size(); i++) {
        temp = array;
        sort(temp.begin() + commands[i][0] - 1, temp.begin() + commands[i][1]);
        answer.push_back(temp[commands[i][0] + commands[i][2]-2]);
    }

    return answer;
}

 

 

반응형