새소식

반응형
알고리즘/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;
}

erase() 함수

// 범위 내 값 지울 때
v.erase(first, last); // 범위는 [first,last)

// 특정 위치 값 지울 때
v.erase(삭제하려는 값의 위치);

 

vector 헤더로 include.

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

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

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

 

min_element() 함수

// 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;
}

 

 

반응형
Contents

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

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