본문 바로가기

항해99_10기/[2주차] 알고리즘 문제풀이

[10번][연습문제][Lv.1] 제일 작은 수 제거하기

문제

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

 

제한 조건

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

 

나의 접근

[pseudo code]
    - min 포인터를 생성 = arr[0]에서 시작 (min value와 index를 저장할 변수를 따로 선언)
    - i =1부터 for loop을 돌면서 min 포인터와 값을 비교하여 작은 값을 찾으면 min 포인터를 해당 값으로 옮김
    - loop를 다 돌면 splice(i,1)으로 해당 값 삭제
    - 만약, 리턴하려는 배열이 빈 배열이라면 [-1]을 리턴

function solution(arr) {
  let minPointer = arr[0];
  let minIndex = 0;
  if (arr.length == 1) {
    return [-1];
  } else {
    for (let i = 1; i < arr.length; i++) {
      if (minPointer > arr[i]) {
        minPointer = arr[i];
        minIndex = i;
      }
    }
  }
  arr.splice(minIndex, 1);
  return arr;
}

console.log(solution([4, 3, 2, 1]));
console.log(solution([10]));

 

메서드 접근

Math.min()을 사용 => 주의점: min 함수에는 꼭 spread 연산자로 arr를 넣어 줘야 함.

function solution(arr) {
  arr.length > 1 ? arr.splice(arr.indexOf(Math.min(...arr)), 1) : (arr = [-1]);
  return arr;
}
console.log(solution([4, 3, 2, 1]));
console.log(solution([10]));