알고리즘-2021/04/23

sanghun Lee·2021년 4월 24일
0

알고리즘

목록 보기
30/52
post-thumbnail

문제 설명

정수를 저장한 배열, 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]

풀이

function solution(arr) {
    if(arr.length <= 1) return [-1];
    //1. find min index with sortedArr
    const min = [...arr].sort((a,b)=>a-b)[0];
    let minIdx = 0;
    for(let i = 0; i < arr.length; i ++){
      if(arr[i] === min){
        minIdx = i;
      }
    }
    //2. do slice with index
    let newArr = [];
    if(minIdx === 0){
      newArr = arr.slice(1,arr.length);
    }else{
      const front = arr.slice(0, minIdx);
      const back = arr.slice(minIdx+1, arr.length);
      newArr = [...front, ...back];
    }
    return newArr;
}

splice를 썻으면 한 열배이상 줄이 줄지 않았을까 싶다.
사실 까먹고 생각도 못했다

  1. 처음에는 정렬된 배열을 통해 최신값을 찾고 반복문을 통해 그에 해당하는 index를 minIdx에 할당한다.
    => 이부분도 indexOf메서드를 쓰면 쉽게 가능해진다.

  2. slice메서드와 spread operator를 통해 최소값만 제외한 것들을 배열에 다시 넣어준다.
    => splice(제거할 숫자의 index, 갯수[optional], 대체할 내용[optional]) 를 통해서 쉽게 가능한 부분

  • 갯수를 기입하지 않으면 start부터 해당 index까지 모두 삭제함

여튼 .. 적재적소에 메서드를 잘 쓰는 것이 중요하나 제한된 메서드로도 풀어낼 수 있는 능력도 필요한 것 같다는 생각이 문듯 들다 만 문제이다

끝!


참고

profile
알고리즘 풀이를 담은 블로그입니다.

0개의 댓글