[C++] 제일 작은 수 제거하기 - 벡터 원소 제거, 최솟값(min_element)

wansuper·2023년 12월 26일
0

CodingTest

목록 보기
13/34

풀이 with 구글링

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> arr) {
    vector<int> answer;
    int min;
    
    if (arr.size() < 2) {           // 입력하는 벡터의 크기가 1 이하이면 -1 삽입
            answer.push_back(-1);
    } else {                       	// 그렇지 않으면 가장 작은 수 찾아서 제거
    
    	// vector에서 최솟값인 원소를 찾을때
        min = *min_element(arr.begin(),arr.end()); 
        cout << min;
        
        for (int i = 0; i < arr.size(); i++) {
            
            // 최솟값인 원소를 제거
            arr.erase(remove(arr.begin(), arr.end(), min), arr.end());
        }
        answer = arr;
    }
    return answer;
}

max_element() : 최댓값 인덱스

min_element() : 최솟값 인덱스

int를 다루는 vector에서 최솟값과 최댓값 찾기

vector<int> v;
//
// 최댓값 max와 max가 위치한 index 구하기
//
int max = *max_element(v.begin(), v.end());
int max_index = max_element(v.begin(), v.end()) - v.begin();
//
// 최솟값 min와 min이 위치한 index 구하기
//
int min = *min_element(v.begin(), v.end());
int min_index = min_element(v.begin(), v.end()) - v.begin();

특정 원소 제거 : erase()와 remove()의 합성

erase()와 remove() 함수를 활용하여 원소를 제거한 방식은 추가 포스팅 참조

[vector에서 원소 하나 삭제하기 : 시간 복잡도 O(N)]

vector<int> v;
v.erase(remove(v.begin(), v.end(), min), v.end());
/*
 * remove는 특정 값을 찾아서 완전히 지우는 것이 아닌, 벡터의 뒤로 보내기 때문에 추가로 erase를 해준다.
 * 
 * remove() : #include <algorithm> 필요
 * remove(first, last, 삭제하려는 값); : 특정 범위를 탐색하여 그 범위 내 특정 값을 뒤로 미뤄둠.
 * 여기서 실제로 원소를 삭제하지 않고, 범위는 [first, last)로 마지막 last는 포함하지 않는다! (포스팅 참조)
 *
 * erase() : #include <vector> 필요
 * v.erase(first, last) 혹은 v.erase(v.begin() + index) : 특정 범위 내 원소 제거
 */
profile
🚗 Autonomous Vehicle 🖥️ Study Alone

0개의 댓글