카테고리 없음

[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 값이 있는 위치를 제거한다.