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

lisoh·2022년 3월 11일
0
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] 입니다.

풀이 과정

//배열에서 가장 작은 수를 제거하고
//만약 빈 배열일 경우 -1을 채워 리턴하기 
//[10]이 빈 배열이라는 게 무슨 뜻이지 
//배열의 요소들은 중복되지 않는다.

//주의!(1)
//for문을 돌렸을때는 삼항연산자를 써서 배열의 요소들을 순서대로 비교하면
//중간에 있는 제일 작은 값을 뒤에 있는 덜 작은 값이 덮어쓰게 되므로
//최소값을 찾을 수 없다.
// arr[i] 의 값과 arr[i-1] 값을 비교해서 더 작은 값을 minArr에 넣는 로직이었음
[5, 4, 1, 3, 2]
5 vs 4  => 4
4 vs 1  => 1
1 vs 3 => 1
3 vs 2 => 2
let minArr = arr[0]
for (let i = 1; i < arr.length; i++){
  minArr = arr[i -1] > arr[i] ? arr[i] : arr[i-1];
//arr[i] : arr[i-1];때문에! 중간에 큰 값이 작은 값을 덮어쓴다! 
}
// 이런 코드 였어요

//Math.min을 발견했다..!
//arr.splice()를 발견했다..!

function solution(arr) {
    const minArr = Math.min(...arr);
    
    for(let i = 0; i < arr.length; i++) {
        if(arr[i] === minArr)  {
	        arr.splice(i, 1);
	        i--;
        }
    }
    
    let answer = arr;
 
    if(answer.length > 0){
        return answer;
    } else {
        return answer = [-1];
    }    
}
profile
프론트엔드 개발자를 꿈꾸는 개발초보 호랑이

0개의 댓글