관리 메뉴

기억을 위한 기록들

[Code Wars] Remove the minimum(C++) 본문

Coding Test - cpp/Etc

[Code Wars] Remove the minimum(C++)

에드윈H 2023. 11. 26. 17:17

https://www.codewars.com/kata/563cf89eb4747c5fb100001b/cpp

 

Codewars - Achieve mastery through coding practice and developer mentorship

A coding practice website for all programming levels – Join a community of over 3 million developers and improve your coding skills in over 55 programming languages!

www.codewars.com

 

 

 

 

 

해당 내용은 박물관에서 오래 된 전시품들을 제거 하려고한다. 전시품들에게 등급을 매기고 제일 낮은 등급의 전시품을 제거하려고 한다는 것이다.


작업 조건으로는 정수 배열 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

 

[C++] std::min_element 최소값/ std::max_element 최대값 구하기

vector, list 등을 사용하다보면 각 데이터들에서 최소값 최대값을 구할때가 필요한데 유용한 std 함수가 있다. template ForwardIterator max_element (ForwardIterator first, ForwardIterator last); template ForwardIterator max_

hyo-ue4study.tistory.com