Coding Test - cpp/Etc
[Code Wars] Remove the minimum(C++)
에드윈H
2023. 11. 26. 17:17
https://www.codewars.com/kata/563cf89eb4747c5fb100001b/cpp
해당 내용은 박물관에서 오래 된 전시품들을 제거 하려고한다. 전시품들에게 등급을 매기고 제일 낮은 등급의 전시품을 제거하려고 한다는 것이다.
작업 조건으로는 정수 배열 vector 가 주어지면 가장 작은 값을 제거한다고 한다. 빨간글로 강조하는 것은 원래의 배열을 변형하면 안된다는 점이다. 값이 같다면 가장 낮은 인덱스를 제거한다고 한다. 또 조건이 배열이 비어있다면 빈 배열을 반환하라는 것이다.
#include <vector>
#include <iostream>
using namespace std;
std::vector<unsigned int> removeSmallest(const std::vector<unsigned int>& numbers) {
//your code here
if(numbers.size()==0)
{
return numbers;
}
std::vector<unsigned int> newNumbers = numbers;
int minIndex = 0;
unsigned long Index = 0;
for(auto item:numbers)
{
if(item< numbers[minIndex])
{
minIndex = Index;
}
Index++;
}
newNumbers.erase(newNumbers.begin() + minIndex);
return newNumbers;
}
처음에는 단순하게 순회하면서 작은 데이터의 인덱스를 찾고 배열복사를 해서 복사된 배열에서 해당 인덱스를 제거하는식으로 위와 같이 진행했었다.
그런데 다른 사람들의 풀이를 보고 std::min_element 라는 함수를 알고 아래와 같이 수정하였다... 이렇게 짧아질줄이야
#include <vector>
std::vector<unsigned int> removeSmallest(const std::vector<unsigned int>& numbers) {
std::vector<unsigned int> NewNumbers = numbers;
auto minRating = std::min_element(NewNumbers.begin(), NewNumbers.end());
if (minRating != NewNumbers.end())
{
NewNumbers.erase(minRating);
}
return NewNumbers;
}
std::min_element 함수로 내가 직접적으로 해당 함수를 순환하면서 검사 할 필요도 없어졌고, iterator를 반환해줘서 바로 제거 할 수 있게 되었다
관련 글
https://hyo-ue4study.tistory.com/576