정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
19132
조금 시간이 오래걸렸던 문제이다. 문제에 접근하는데 입출력 예와 문제만을 봐서 배열을 정렬해도 되는지 자세하게 나오지는 않았다. 처음에는 배열을 정렬하고 정렬된 배열을 이용하여 최소의 값을 추출하였지만 실행 결과가 답을 알려주었다. 리턴하는 배열은 정렬이 되면 안된다라는 것을 알기 까지 꽤 오래 시간이 걸렸던 것 같다. 휴;...
그래서 배열을 복사하고 그 배열을 original이라고 붙였다. 실제로 원 배열과 똑같기 때문이다.
매개변수로 가져온 배열은 정렬하고 최소의 값을 뽑아내는 용도로 사용하고 original 배열을 최소값 이상인 값들만 출력하였다 또한 배열의 길이가 0일때는 [-1]을 리턴하여 문제를 해결하였다.
function solution(arr) {
//배열을 한개 복사함
let arr_original = arr.map((v) => v)
// 원배열을 이용하여 최소의 값을 추출함.
let min = arr.sort((a,b) => b-a).pop()
// 복사한 배열 중 최소값 이상인 값들을 filter하고 그 배열의 길이가 0이상일때는 filter된 배열을 리턴하고 0일경우 [-1]을 리턴하였다.
return arr_original.filter((e) => e > min).length > 0 ? arr_original.filter((e) => e > min) : [-1]
}
처음에 나도 Math.min으로 접근하였다가 위와 같이 해결하였다.
배열 안에 전개연산자를 사용하고 해당 배열의 값들을 전부 비교할 수 있다.. 와우
또한 이 풀이는 매개변수로부터 오는 배열공간만 할당되니 저장공간을 절약할 수 있다.
function solution(arr) {
//최소의 값을 찾고 최소값의 index와 splice를 하여 원 배열을 수정하였다.
arr.splice(arr.indexOf(Math.min(...arr)),1);
// 배열의 길이가 1보다 작을때 [-1]을 리턴한다.
if(arr.length<1)return[-1];
// 해당 배열을 리턴한다.
return arr;
}