テストコード|(c++)プログラマー:Kビット数
に質問
配列のi番からj番までを切り取って並べ替えると、k番目の数字を求めようとします.
例えばarrayが[1,5,2,6,3,7,4],i=2,j=5,k=3の場合
制限
🎹📢I/O例
例1
[1,5,2,6,3,7,4]を2番目から5番目に切り取り、並べ替えます.[2,3,5,6]の3番目の数字は5です.
例2
[1,5,2,6,3,7,4]を4番目から4番目に切り取り、並べ替えます.[6]の最初の数字は6である.
例#3
[1,5,2,6,3,7,4]最初から7番目にカット[1.2.3.4.5.6.7]の3番目の数字は3です.
ほどく
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> array, vector<vector<int>> commands);
int main() {
vector<int> output = solution({ 1,5,2,6,3,7,4 }, { {2,5,3},{4,4,1},{1,7,3} });
for (int i = 0; i < output.size(); i++) {
cout << output[i] << endl;
}
return 0;
}
// 2차배열인 commands의 요소인 2차 배열의 데이터 구성은 i,j,k
// array의 i번째 부터 j번째 요소를 잘라내고 오름차순으로 정렬한다.
// k번째 숫자를 출력한다.(commands의 요소 개수만큼)
vector<int> solution(vector<int> array, vector<vector<int>> commands) {
vector<int> answer;
answer.reserve(commands.size()); // capacity 초기 설정
int i, j, k; // commands 요소의 i, j, k
for (int cnt = 0; cnt < commands.size(); cnt++)
{
i = commands[cnt][0] -1; // command의 i (index를 맞추기 위해 -1)
j = commands[cnt][1]; // command의 j (j를 포함하기 위해 -1을 해주지 않았다)
k = commands[cnt][2] -1; // command의 k
// 새로 담을 배열 선언
vector<int> newArray, sortArray;
newArray.reserve(array.size());
// i인덱스부터 j인덱스까지 추가
for (int m = i; m < j; m++) {
newArray.push_back(array[m]);
}
// -- vector의 멤버함수 assign를 이용한 복사 --
// 이전에 있던 모든 원소를 삭제시키고 새로운 내용으로 덮어씌운다.
// newArray.assign(array.begin() + i, array.begin() + j);
// -- algorithm 라이브러리의 copy함수를 통한 복사 --
// 복사할 사이즈가 확보되어야 하고, 이전에 데이터가 있으면 보존된다.
// newArray.resize(j - i); // 복사할 사이즈를 확보
// copy(array.begin() + i, array.begin() + j, newArray.begin());
// 정렬
sort(newArray.begin(), newArray.end());
// 결과배열에 k인덱스 추가
answer.push_back(newArray[k]);
}
return answer;
}
とても簡単な問題です...解きほぐしてからずっとソートの問題を考えていたが,ソートが核心的な問題ではないと考えた場合,アルゴリズムライブラリを用いてソートを行った.ソートアルゴリズムが実装されていれば、もっと時間がかかりますよね?
解が終わった後、ベクトルのデータコピー方法を見つけました.2つのベクトルのメンバー関数の割り当てとアルゴリズムライブラリのcopy関数があります.もっと簡単でいいんじゃない?!
参考資料とサイト(ありがとうございます)
Reference
この問題について(テストコード|(c++)プログラマー:Kビット数), 我々は、より多くの情報をここで見つけました https://velog.io/@goblin820/코딩테스트-c-프로그래머스-K번째수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol