[프로그래머스] 제일 작은 수 제거하기
이번 문제는 내장 함수를 얼마큼 잘 알고 있느냐의 싸움인 것 같아요.
문제는 쉬운편인데 좀 더 짧게 쓰려고 노력했습니다.
해결방안
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));
여기까지 프로그래머스 제일 작은 수 제거하기 해결방안에 대해 설명해보았습니다.