카테고리 없음
[C++] 프로그래머스 제일 작은 수 제거하기
지휘리릭
2020. 2. 27. 17:53
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer;
int minn = *min_element(arr.begin(), arr.end());
for(int i =0;i<arr.size();i++){
if(minn == arr[i]) continue;
answer.push_back(arr[i]);
}
if(answer.size() == 0) answer.push_back(-1);
return answer;
}
역시 벡터와 iterator는 어렵다. 반복자의 개념과 무엇을 리턴하는지에 대해서 아직 헷갈렸기 때문에 그냥 for문을 사용했다. 물론 이렇게 해도 정답으로 처리되지만 아래 코드가 더 시간도 단축되고 좋은 코드같다.
#include <algorithm>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer = arr;
// 배열에서 가장 작은 수
int minn = *min_element(answer.begin(), answer.end());
// minn 값이 위치한 인덱스
int pos = find(answer.begin(), answer.end(), minn) - answer.begin();
answer.erase(answer.begin()+pos);
if(answer.size() == 0)answer.push_back(-1);
return answer;
}
min 최소값을 구하는 것 까지는 같다.
find 함수에서 최소값의 위치를 구하는데 이 때 answer.begin()을 빼줘서 최소값의 온전한 인덱스를 받아온다.
erase 함수를 통해 min 값이 있는 위치를 제거한다.