문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4, 3, 2, 1]인 경우는 [4, 3, 2]르 리턴하고, [10]이면 [-1]을 리턴합니다.
제한사항
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i != j이면 arr[i] != arr[j] 입니다.
입출력 예
arr | return | ||
[4, 3, 2, 1] | [4, 3, 2] | ||
[10] | [-1] |
문제 풀이
풀이 언어 : C++
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer;
if(arr.size()==1) // arr의 길이가 1이라면
{
answer.push_back(-1); // -1을 채워 리턴
}
else
{
answer=arr;
// 최소값 찾기
int min_index=0; // 최소값 인덱스
for(int i=1; i<arr.size(); i++)
{
if(arr[min_index]>arr[i]) // min index 번째 수보다 i번째 수가 더 작다면
{
min_index=i; // 최소값 인덱스 업데이트
}
}
// 최소값 삭제
answer.erase(answer.begin()+min_index);
}
return answer;
}
일단 쉽게 끝낼 수 있는 것 부터 끝내 보도록 하자. 빈 배열을 반환해야 하는 경우는 배열의 크기가 1일 때가 유일하다. 따라서 배열의 크기가 1인 경우 먼저 -1을 채워 리턴해주도록 한다.
만약 배열의 길이가 1이 아니라면 최소값을 찾아 그 값을 배열에서 지우고 리턴하면 된다. 먼저 min_index를 선언하고 0으로 초기화하여 최소값의 인덱스를 담을 정수형 변수를 선언해준다. 그리고 반복문을 돌리면서 최소값이 들어있는 인덱스를 찾는다. min_index번째 숫자와 i번째 숫자를 비교하면서 더 작은 수가 나오면 min_index를 업데이트하는 방식이다.
마지막으로 answer에서 erase 함수를 이용해 min_index 번째 숫자만 지워주고 정답을 리턴하면 된다.
참고사항
v.erase(iterator itr)은 itr 위치에 있는 수를 지워주는 함수이다. 매개변수가 iterator 형이기 때문에 삭제할 인덱스를 정해줄 때 v.begin()에 원하는 인덱스만큼 + 해주면 된다.
vector<int> v;
...
v.erase(v.begin+3); // 3번째 인덱스에 있는 값 삭제
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12935
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Code KATA > 알고리즘 코드카타' 카테고리의 다른 글
[2024.12.31] 가운데 글자 가져오기 (1) | 2024.12.31 |
---|---|
[2024.12.30] [PCCP 기출문제] 1번 / 동영상 재생기 (0) | 2024.12.30 |
[2024.12.29] 없는 숫자 더하기 (3) | 2024.12.27 |
[2024.12.28] 핸드폰 번호 가리기 (0) | 2024.12.27 |
[2024.12.27] 음양 더하기 (0) | 2024.12.27 |