알고리즘🅰/프로그래머스

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

개발조각 2022. 3. 3. 18:23
728x90
반응형

이번 문제는 내장 함수를 얼마큼 잘 알고 있느냐의 싸움인 것 같아요.

문제는 쉬운편인데 좀 더 짧게 쓰려고 노력했습니다.

 


해결방안

function solution(arr) {        
    return arr.length < 2 ? [-1] : arr.filter(a => a > Math.min(...arr));
}

 

이번문제는 해결방안 순서를 쓰기 애매해서 바로 해결방안에 대해 설명하겠습니다.

이 문제를 보면 배열 arr이 빈 배열인지 아닌지 판단하고
빈 배열이 아닐 경우 배열 arr에서 가장 작은 수를 제거한 배열을 리턴하고
배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴해주는 문제입니다.​​

그래서 조건문을 써주었는데요. 그중 삼항연산자를 써주었습니다.

 

 

삼항 연산자

구문 : 조건 ? true : false

  • 조건이 true이면 true를 실행
  • 조건이 false이면 false를 실행

이제 삼항 연산자 가지고 조건과 true, false에 무엇을 넣을 건가에 대해 써보자면

  • 조건 : arr 배열의 길이가 2보다 작은지 아닌지 판단 -> arr.length < 2
  • true : arr 배열의 길이가 2보다 작으면 [-1]반환 -> [-1]
  • false : arr 배열의 길이가 2보다 크면 arr에서 가장 작은 수 제거한 배열 반환 -> arr.filter(a => a > Math.min(...arr));

 

조건 : arr 배열의 길이가 2보다 작은지 아닌지 판단 -> arr.length < 2

제한 조건 "arr은 길이 1 이상인 배열입니다."라는 조건이 있습니다.

그래서 여기서 "리턴하려는 배열이 빈 배열인 경우"라는 말은

"arr의 배열의 길이가 1"이라는 말입니다.

 

그래서 조건에 arr.length < 2로 써주었습니다.

  • treu : 빈 배열인 경우
  • false : 빈 배열이 아닌 경우

 

true : arr 배열의 길이가 2보다 작으면 [-1]반환 -> [-1]

여기는 딱히 쓰말이 없어서 다음으로 넘어가겠습니다.

 

false : arr 배열의 길이가 2보다 크면 arr에서 가장 작은 수 제거한 배열 반환
-> arr.filter(a => a > Math.min(...arr));

filter()메서드를 통해 조건에 알맞은 새로운 배열을 반환해 주었습니다.

filter()메서드는 map()메서드랑 쓰임이 다른데요.

  • map() : 배열 안에 원소 전체를 바꾸고 싶을 때
  • filter() : 배열안에 원소 중에서 원하는 값만 가지고 오고 싶을 때

그래서 이문제에서는 arr에서 가장 작은 수 제거해야 돼서 filter()메서드를 사용하였습니다.

 

MDN Web Docs
filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.

구문 : arr.filter(callback(element[, index[, array]])[, thisArg])

  • callback :각 요소를 시험할 함수. true를 반환하면 요소를 유지하고, false를 반환하면 버립니다. 다음 세 가지 매개변수를 받습니다.
  • element : 처리할 현재 요소.
  • index Optional : 처리할 현재 요소의 인덱스.
  • array Optional : filter를 호출한 배열.
  • thisArg Optional : callback을 실행할 때 this로 사용하는 값.
// filter() 메서드 예제
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6);
console.log(result); // result = ["exuberant", "destruction", "present"]

 

이제 filter을 할 조건을 만들어줘야 되는데요.

  • 원소 > arr에서 가장 작은 수

이렇게 써주면 되겠죠?

 

여기서 arr에서 가장 작은 수를 구하기 위해서는 Math.min()함수를 사용하시면 쉽게 구하실 수 있습니다.

MDN Web Docs
Math.min() 함수는 주어진 숫자들 중 가장 작은 값을 반환합니다.

문법 : Math.min([value1[, value2[, ...]]])

  • value1, value2, ... : 숫자형
// Math.min()함수 예제
var x = 10, y = -20;
var z = Math.min(x, y);


이 문제에서는 배열에서의 최솟값을 구해야 됩니다.

Math.min()의 () 안에 스프레드 연산자를 넣으시면 배열에서의 최솟값을 쉽게 구할 수 있습니다.

테스트 1 (arr = [4,3,2,1])
 Math.min(...arr)) ===  Math.min(1,2,3,4));

여기까지 프로그래머스 제일 작은 수 제거하기 해결방안에 대해 설명해보았습니다.

728x90
반응형