프로그래머스 문제를 풀다가..
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer = arr;
int min = *min_element(answer.begin(), answer.end());
answer.erase(remove(answer.begin(), answer.end(), min));
if(arr.size() == 1)
answer.push_back(-1);
return answer;
}
erase함수를 아무리 사용해도 오류가 생기길래 보니까
remove함수로 구간 내 특정 수를 찾아서 지운다음, remove는 값만 지우고 배열의 실제 크기는 줄이지 않으므로 erase를 함께 써서 배열 크기를 조정해야 한다고 한다.
min_element는, *를 함께 써서 특정 구간 내에 최솟값을 찾을 때 사용할 수 있다.
그리고, answer.push_back() 으로 값을 복사해서 벡터를 복제하는 것보다
vector<int> answer = arr; // arr 배열을 그대로 복사
이렇게 초기화하는 게 더 효율적이다.