프로그래머스 연습하기<제일 작은 수 제거하기>

2026. 3. 23. 09:45Programmers

프로그래머스의 < 제일 작은 수 제거하기 > 문제이다.

 

vector를 활용한 문제이다.

 

이 문제의 핵심은 다음과 같다.

 

1. 빈 배열일 때 -1 리턴

2. 최솟값 찾기

3. 최솟값 지우기

 

빈 배열일 때 -1 리턴

이는 어렵지 않게 할 수 있었다.

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

 

함수 반환타입이 vector<int>이기 때문에 반환타입에 맞춰 리턴을 해주었다.

 

 

최솟값 찾기

최솟값을 담을 변수를 생성해주고 그 변수에 매개변수로 받은 벡터의 첫 번째 값을 넣어주었다.

 

그 후 벡터의 각 원소를 반복문을 통해 비교하여 최솟값을 변수에 계속 초기화 해준다.

int min = arr[0];
    for(int i : arr)
    {
        if(min>i)
            min = i;
    }

 

 

최솟값 제거하기(*)

이 부분이 조금 생각을 필요로 했던 부분인 것 같다.

 

erase() 함수를 활용해서 해보려고 했지만 erase는 지울 위치를 넣어야하기에 정렬 후에 해야한다.

 

정렬 + erase()를 하는 데에는 효율도 좋지 않고 문제의 취지에 맞지 않는 것 같아 어떻게 해야할까 생각을 많이 했던 것 같다.

 

그래서 생각한 방법이 새 벡터에 최솟값을 제외한 나머지 값을 푸시하는 방법이다.

 

vector<int> answer;
    for(int x : arr)
    {
        if(x != min)
            answer.push_back(x);
    }
    
    return answer;

이렇게 하면 최솟값만 제외하고 나머지 값은 그 벡터의 순서대로 푸시되어 최솟값만 쏙 빠진 벡터가 반환된다.

 

정리

문제의 핵심 포인트를 체크해보면 다음과 같다.

 

1. 빈 배열일 때 -1 반환

2. 최솟값 찾기

3. 최솟값 삭제

 

최솟값을 삭제하는 방법은 여러가지겠지만 효율과 문제의 취지를 파악했을 때 새 벡터에 복사하는 것이 좋다고 생각해 복사하는 방식으로 문제를 해결했다.