본문 바로가기

알고리즘/[프로그래머스]Lv.1

[프로그래머스]Lv1. 제일 작은 수 제거하기

본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+  Java언어 내용도 포함되어있습니다. )

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/12935?language=cpp 

 

프로그래머스

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

programmers.co.kr

 

 

1.문제설명

문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

제한 조건
arr은 길이 1 이상인 배열입니다.인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

 

2. 문제해결 접근

  • vector의 내림차순 정렬
  • 마지막 인덱스 제거 (최소값이 올것이므로)
  • 인덱스 제거했을 때, 빈 vector일 경우, -1을 요소로 추가

 

 

3.C++ 답안

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

using namespace std;

vector<int> solution(vector<int> arr) {
    vector<int> answer;
    int temp;
    
    if(arr.size() == 1){
        answer.clear();
        answer.push_back(-1);
    }
    else{
    // 내림차순 정렬
    sort(arr.rbegin(), arr.rend());
    
    answer.resize(arr.size());    
    copy(arr.begin(), arr.end(), answer.begin());    
    
    temp = arr.front();
    
    for(int i = 0; answer.size(); i++){
        if(temp == answer[i])
        {
            // answer.pop_back();
            answer.erase(answer.begin() + i);
            break;
        }
    }
        
    }

    return answer;
}

 

 

테스트케이스는 통과하지만 채점하면 통과하지 않는 너란 코드 너무.. 싫다 ㅠ...

 

검색해보니 #include <algorithm>에 min_element라는함수가 있더라

vector내의 가장 작은 수를 반환해주는 함수인데,

 

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


using namespace std;

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

아주아주 간결한 코드로 완성되었다.

 

4. C++ 문법 설명과 표현법

min_element, max_element

#include <algorithm>에 포함되어

구간 안에서 (배열, 벡터 등..) 최대, 최소값을 구하는 함수이다.

단, 주의할점은 값 자체를 리턴하는 것이 아닌, 그 값의 주소(index)를 리턴한다

 

 

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

 

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

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

blog.naver.com