[C++] 프로그래머스 제일 작은 수 제거하기
2020. 12. 6.
반응형

programmers.co.kr/learn/courses/30/lessons/12935

 

코딩테스트 연습 - 제일 작은 수 제거하기

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

programmers.co.kr

 

1. 서론

 

프로그래머스에서 level 1 문제 풀면서 사상 최대로 많은 함수를 쓴 문제. 이 함수들을 안 쓰고 그냥 코드로 구현했으면 코드가 아주 길어졌을 듯...

 

2. 문제 풀이

 

배열에서 가장 작은 수를 제거한다. 만약에 배열에 값이 딱 하나만 있을 경우, 그 값을 제거하면 빈 배열이 되기 때문에 그런 경우에는 배열에 -1을 넣어준다. 

 

처음에는 정렬을 해서 작은 수를 지워야 하나 했는데 원래 순서대로 출력해야 하기 때문에 정렬은 하지 않기로 했다. 그래서 되게 여러 가지 함수를 썼는데 정렬하지 않고 작은 수를 찾기 위해 min 함수를 썼고, 그 min 값을 배열에서 찾기 위해 find 함수를 썼고 find에서 찾은 값을 지우기 위해 erase 함수를 썼다. 

즉, 가장 작은 수를 찾고, 배열에서 그 수를 찾고, 그 값을 지웠다.

 

3. 코드 설명

 

#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr) {
    int m = arr[0], i, f;
    
    for (i = 0; i < arr.size(); i++)
        m = min(m, arr[i]);

    f = find(arr.begin(), arr.end(), m) - arr.begin();
    arr.erase(arr.begin() + f);
    
    if (arr.empty())
        arr.push_back(-1);
    
    return arr;
}

 

 

min 함수로 배열 내에서 가장 작은 값을 찾는다. min(비교 값, 배열 값)

그리고 find 함수로 배열 내에서 가장 작은 그 값의 위치를 찾아낸다. 내가 C++을 제대로 배워본 적이 없어서 잘 모르겠지만 find 함수는 그 값의 주소 값을 return 하기 때문에 뒤에서 begin 값을 빼 index값을 반환해준다... find(배열 시작, 끝, 찾으려는 값)

그리고 erase 함수로 찾아낸 값을 지워줬다. 배열.erase(배열 시작 + 지우려는 값의 위치)

그렇게 배열을 처리하고 만약에 배열이 비었을 경우에 -1을 넣도록 해줬다.

 

 

 

 

 

 

 

 

 

 

 

 

반응형
myoskin