Programmers Review

[Lv 1] K번째수

hanseongbugi 2024. 5. 30. 17:34

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이 문제는 벡터 slice 문제이다.

 

vector를 slice하기 위해서는 begin()과 end() 함수를 사용해야 한다.

begin() 함수는 벡터의 첫번째 인덱스를 가리키는 iterator를 반환한다. 마찬가지로 end() 함수는 벡터의 마지막 인덱스를 가리킨다.

 

문제에서 i에서 j까지 배열을 slice하라고 나타냈기 때문에 begin()에 i와 j 값을 더해야한다.

이때 i는 0부터 시작하는 것이 아닌 1부터 시작하는 것을 기억해야한다.

따라서 첫번째 매개변수에는 begin() + i + 1을 해야 i부터 자를 수 있다.

두번째 매개변수에는 begin() + j를 해야한다.

 

마지막으로 answer 배열에 삽입 시 k - 1 인덱스의 요소를 삽입해야한다.

 

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

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