풀이 with 구글링
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer;
int min;
if (arr.size() < 2) { // 입력하는 벡터의 크기가 1 이하이면 -1 삽입
answer.push_back(-1);
} else { // 그렇지 않으면 가장 작은 수 찾아서 제거
// vector에서 최솟값인 원소를 찾을때
min = *min_element(arr.begin(),arr.end());
cout << min;
for (int i = 0; i < arr.size(); i++) {
// 최솟값인 원소를 제거
arr.erase(remove(arr.begin(), arr.end(), min), arr.end());
}
answer = arr;
}
return answer;
}
int를 다루는 vector에서 최솟값과 최댓값 찾기
vector<int> v; // // 최댓값 max와 max가 위치한 index 구하기 // int max = *max_element(v.begin(), v.end()); int max_index = max_element(v.begin(), v.end()) - v.begin(); // // 최솟값 min와 min이 위치한 index 구하기 // int min = *min_element(v.begin(), v.end()); int min_index = min_element(v.begin(), v.end()) - v.begin();
erase()와 remove() 함수를 활용하여 원소를 제거한 방식은 추가 포스팅 참조
[vector에서 원소 하나 삭제하기 : 시간 복잡도 O(N)]
vector<int> v; v.erase(remove(v.begin(), v.end(), min), v.end()); /* * remove는 특정 값을 찾아서 완전히 지우는 것이 아닌, 벡터의 뒤로 보내기 때문에 추가로 erase를 해준다. * * remove() : #include <algorithm> 필요 * remove(first, last, 삭제하려는 값); : 특정 범위를 탐색하여 그 범위 내 특정 값을 뒤로 미뤄둠. * 여기서 실제로 원소를 삭제하지 않고, 범위는 [first, last)로 마지막 last는 포함하지 않는다! (포스팅 참조) * * erase() : #include <vector> 필요 * v.erase(first, last) 혹은 v.erase(v.begin() + index) : 특정 범위 내 원소 제거 */