프로그래머스 제일 작은 수 제거하기

김금동·2021년 11월 12일
0

알고리즘

목록 보기
9/12

https://programmers.co.kr/learn/courses/30/lessons/12935

function solution(arr) {
// 예외처리
    if (arr.length ===1){
        return [-1]
    }
    //최솟값을 자바스크립트가 설정할 수 있는 최대 정수로 할당
    let minNum = Number.MAX_SAFE_INTEGER;
    // 그 전에 나온 최솟값과 현재값을 비교하며 최솟값을 할당
    for (let i=0; i<arr.length; i++){
        minNum = Math.min(arr[i],minNum)
    }
    //최솟값 찾은 후 indexOf로 인덱스 찾기
    const minIndex = arr.indexOf(minNum)
    // splice로 제거
    arr.splice(minIndex,1)
    return arr
}

처음에 sort()로 내림차순으로 만들어서 뒤에 값만 제거하는 날먹을 하려 했지만 리턴하는 배열이 들어올때랑 그 수만 제거했을 때여야 했기 때문에 작은 수를 뺄 수 밖에 없는 상황이 되었다.

같은 팀원이 푼걸 보니까 굳이 최소값을 처음 할당할 때 큰 정수로 하지 않아도 됐다.

function solution(arr) {
// 예외처리
    if (arr.length ===1){
        return [-1]
    }
    //최솟값을 arr의 처음 원소로 지정
    let minNum = arr[0];
    // 처음 원소 뺀것 부터 시작
    for (let i=1; i<arr.length; i++){
        minNum = Math.min(arr[i],minNum)
    }
    //최솟값 찾은 후 indexOf로 인덱스 찾기
    const minIndex = arr.indexOf(minNum)
    // splice로 제거
    arr.splice(minIndex,1)
    return arr
}

이러면 한개를 덜 할당하고 for문도 1개빼고 시작해서 더 빠르게 된다.

근데 또 팀원중 한분이 더 좋은 방식을 소개해줬다.

function solution(arr) {
  // 예외처리
  if (arr.length === 1) {
    return [-1];
  }
  //최솟값을 arr 구조분해 할당을 통해 찾음
  const minNum = Math.min(...arr);
  //최솟값 찾은 후 indexOf로 인덱스 찾기
  const minIndex = arr.indexOf(minNum);
  // splice로 제거
  arr.splice(minIndex, 1);
  return arr;
}

확실히 구조분해 할당을 통해 넣으니 훨씬 빨라진다
배열안에 있는 숫자를 이용할 때 for문을 통해 이용할 수 밖에 없다는 생각때문에 구조분해 할당을 생각도 못했다.

profile
나원래chu해

0개의 댓글