본문 바로가기
프로그래머스 C++/Level.1

프로그래머스 Level.1 제일 작은 수 제거하기

by yeni_0224 2023. 12. 25.
728x90
반응형

 

 

너무 오랜만에 코딩 공부를 해버렸다. 문법이 잘 기억나지 않는다. 조만간 소스코드로 업무를 빡세게 시작하게 될 예정이기도 하고, 오랜만에 기억을 되찾고자 프로그래머스를 켰다.

 

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

using namespace std;

vector<int> solution(vector<int> arr) {
    vector<int> answer;
    if(arr.size() == 1){
        arr[0] = -1;  
    }
    else{
         arr.erase(min_element(arr.begin(), arr.end()));
    }
    answer = arr;
    return answer;
}

 

원래는 else에서 제일 큰 값부터 작은 값으로 배열의 원소들을 나열하고, 제일 마지막에 있는 원소를 제거하는 그런 걸 생각했으나 어떻게 써야했나 기억이 나지 않아 일단 min_element라는 함수를 사용하여 문제를 해결했다.

 

https://m.blog.naver.com/kks227/220246803499

 

[C++ 강좌] 093 - 알고리즘 헤더 파일 (2) - max_element(), min_element()

저번 글에서 두 개의 값 중 최대, 최소값을 찾는 함수를 알려드렸는데...비슷한 역할을 하면서 사용법이 다...

blog.naver.com

https://notepad96.tistory.com/40

 

C++ Vector 최대값, 최소값, 인덱스 구하기

1. 최대값, 최소값 vector 컨테이너에서 최대값, 최소값을 구할 경우 for문을 작성할 수도 있지만 이는 복잡하다. 그래서 algorithm 라이브러리의 있는 max_element를 사용한다면 한줄로도 간단하게 최대

notepad96.tistory.com

 

내가 구상했던 풀이와 비슷한 풀이법을 찾아보기로 했다.

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(vector<int> arr) {
    vector<int> answer=arr;

    sort(arr.begin(),arr.end());

    for(int i=0;i<answer.size();i++){
        if(answer[i]==arr[0]){
            answer.erase(answer.begin()+i);
            break;
        }   
    }

    if(answer.empty())
        answer.push_back(-1);

    return answer;
}

 

min_index , max_index 라는 변수도 있어서 다음에 기회가 된다면 적절히 활용해도 좋을 것 같다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> arr) {
    int min_index = 0;

    if(arr.size() == 1) {
        vector<int> res;
        res.push_back(-1);
        return res;
    }

    for(int i = 0; i < arr.size(); i++) 
        if(arr[min_index] > arr[i]) min_index = i;
    arr.erase(arr.begin() + min_index);
    return arr;
}

 

 

728x90
반응형