새소식

반응형
알고리즘/c++

[C++] min_element로 최소값 원소 찾기, erase로 원소 지우기

  • -
728x90
반응형

나는야 졸리면 레벨원 푸는 사람

레벨투 .. 다시 낼부터 고 ㅎ

 

무튼 풀다가 잘 안써버릇한 메소드가 있어서 겟겟 ㅎㅎ

아래 문제 풀이 중

https://school.programmers.co.kr/learn/courses/30/lessons/12935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <algorithm> #include <vector> using namespace std; vector<int> solution(vector<int> arr) { if (arr.size() == 1) { return { -1 }; } arr.erase(min_element(arr.begin(), arr.end())); return arr; }
// 범위 내 값 지울 때 v.erase(first, last); // 범위는 [first,last) // 특정 위치 값 지울 때 v.erase(삭제하려는 값의 위치);

 

vector 헤더로 include.

첫번째 경우는 해당 범위의 모든 값을 지우는 것.

두번째 경우이자, 벡터의 i번째 인덱스의 값을 지우고 싶다면, v.erase(v.begin() + i);

특정 값을 찾아서 삭제하는 것은 불가. algorithm 헤더의 remove 함수 써야함

 

// iterator(반복자)를 리턴하므로 int min = *min_element(v.begin(), v.end()); cout << "가장 작은 수 : " << min << endl; int min_index = min_element(v.begin(), v.end()) - v.begin(); cout << "가장 작은 수의 인덱스 : " << min_index << endl;

algorithm헤더.

시간복잡도 O(n)

iterator 리턴하므로, 최솟값을 알고싶은지, 최솟값의 위치를 알고싶은지에 따라 위와 같이 사용

 

 

더보기

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> arr) {
    vector<int> answer;
    int min=arr[1];
    if(arr.size()<2){
        answer.push_back(-1);
        return answer;
    }
    for(int i=1;i<arr.size();i++){
        if(arr[i]<min) min=arr[i];
    }
    for(int i=0;i<arr.size();i++){
        if(arr[i]!=min) answer.push_back(arr[i]);
    }
    return answer;
}

 

 

반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.