프로그래머스 연습하기<제일 작은 수 제거하기>
2026. 3. 23. 09:45ㆍProgrammers

프로그래머스의 < 제일 작은 수 제거하기 > 문제이다.
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. 최솟값 삭제
최솟값을 삭제하는 방법은 여러가지겠지만 효율과 문제의 취지를 파악했을 때 새 벡터에 복사하는 것이 좋다고 생각해 복사하는 방식으로 문제를 해결했다.
'Programmers' 카테고리의 다른 글
| <프로그래머스 C++> 숫자 문자열과 영단어 (1) | 2026.04.21 |
|---|---|
| < 프로그래머스 C++ > 시저 암호 (0) | 2026.04.20 |
| < 프로그래머스 > 최소직사각형 (0) | 2026.04.17 |
| 백준 <주사위 세 개> (C++ 랜덤함수) (0) | 2026.04.03 |
| 프로그래머스 핸드폰 번호 가리기 문제 (1) | 2026.03.18 |