세 번째 문제인 제일 작은 수 제거를 학습해 봤습니다.
문제 설명입니다.
문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 조건
맨 처음 풀어봤을 당시에는
function solution(arr) {
arr.splice(arr.length - 1, 1);
if(arr[0] === undefined) {
return [-1];
} else {
return arr;
}
}
이런 형태로 얼추 나왔습니다. 실행에는 문제가 없지만 코드 채점에서 실패가 뜨더군요..
그래서 다른 분들의 풀이도 참고해 봤습니다.
두 가지가 눈에 들어왔습니다.
function solution(arr) {
arr.splice(arr.indexOf(Math.min(...arr)),1);
if(arr.length<1)return[-1]; // splice로 제거가 됐기 때문에 길이는 무조건 0
return arr;
}
function solution(arr) {
var a=Math.min.apply(null,arr);
arr.splice(arr.indexOf(a),1);
if(arr[0]==undefined)
return [-1];
else
return arr;
}
이 두 가지 방법인데 찾아보니 공통점이 두 분 다 프로토타입을 사용하신 거 같았습니다.
첫 번째 코딩에서는 splice를 이용해서 지정된 배열 위치의 항목을 제거시키는 방식인데 indexOf 내부에 Math 문법을 사용해서 가장 작은 항목을 찾아 낸 후 indexOf를 통해서 1이 위치한 위치를 표현해서 splice로 제거를 하는 방식을 사용했습니다.
그 후에는 10이면 배열의 길이는 무조건 0이 되기 때문에 -1을 출력하고 나머지는 4, 3, 2를 출력하는 방식을 사용했습니다.
두 번째는 splice에 한 번에 코딩을 하신게 아니라 a 값을 함수로 우선 지정을 하셨습니다.
function solution(arr) {
arr.splice(arr.indexOf(Math.min(...arr)), 1);
if (arr.length < 1) {
return [-1];
} else {
return arr;
}
}
정리해서 이런 방식으로 제출을 했습니다.
이번 문제를 통해서 공부한 문법을 적어보겠습니다.
.splice() : 지정된 위치의 항목이나 범위를 제거할 수 있습니다.
.indexOf() : 항목의 문자나 숫자의 위치를 숫자로 표시해줍니다.
Math : 여러가지 표시법이 있습니다. min은 최소값을 구해줍니다(...) : 예를 들어 [a1, a2, a3, a4, a5, a6, a7]이라는 배열이 있는데
이 배열을 검색할 때 (1, 2, ...a7) 이런 식으로 사용 가능합니다.
번거롭지 않게 중간을 생략하는거 같습니다..apply() : 두 배열을 합쳐서 계산해줄 때 사용합니다
a = [1, 2], b = [3, 4, 5] 일 경우
a.push.apply(a1, a2) => [1, 2, 3, 4, 5] 로 출력이 가능합니다.
스스로 풀려고 하느냐고 한 문제가 쉬워도 아직까지 시간이 너무 많이 들어가지만 스스로 풀 수 있을 때 까지 해보겠습니다~