문제 설명
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
- array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
- 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
- 2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때,
commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록
solution 함수를 작성해주세요.
제한사항
- array의 길이는 1 이상 100 이하입니다.
- array의 각 원소는 1 이상 100 이하입니다.
- commands의 길이는 1 이상 50 이하입니다.
- commands의 각 원소는 길이가 3입니다.
입출력 예
array | commands | return |
[1, 5, 2, 6, 3, 7, 4] | [[2, 5, 3], [4, 4, 1], [1, 7, 3]] | [5, 6, 3] |
입출력 예 설명
[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;
vector<int> solution(vector<int> array, vector<vector<int>> commands) {
vector<int> answer;
for(vector v : commands) {
int start, end, nth;
vector<int> tmp;
for(int i=0; i<v.size(); i++) {
start = v[0] - 1;
end = v[1] - 1;
nth = v[2] - 1;
}
for(int i=start; i<=end; i++) {
tmp.push_back(array[i]);
}
sort(tmp.begin(), tmp.end());
answer.push_back(tmp[nth]);
}
return answer;
}
commands가 2중 벡터로 인자에 들어온다.
따라서 일단 반복문으로 commands안에 하나하나의 벡터(command 하나)에 접근해준다.
start, end, nth 변수는 각각 시작, 끝, 몇번째인지를 나타내는 변수이다.
한 command에는 start, end, nth가 순서대로 있는데, 배열의 시작은 0부터 시작이므로 각각 1을 빼준다.
그리고 구한 start와 end를 이용해 주어진 array 배열에서 start부터 end까지 tmp라는 벡터에 push해준다.
그리고 tmp를 sort해주고, 구한 nth를 통해 tmp의 nth번째 요소를 answer에 push해준다.
이런 방식으로 반복해서 answer을 구해주면된다.
'PS > Programmers' 카테고리의 다른 글
Programmers / Level 1 / 체육복 / C++ (0) | 2021.10.30 |
---|---|
Programmers / Level 1 / 모의고사 / C++ (0) | 2021.10.28 |
Programmers / Level 1 / 완주하지 못한 선수 / C++ (0) | 2021.10.26 |
Programmers / Level1 / 소수 만들기 / C++ / JS (0) | 2021.10.26 |