https://programmers.co.kr/learn/courses/30/lessons/12935
function solution(arr) {
// 예외처리
if (arr.length ===1){
return [-1]
}
//최솟값을 자바스크립트가 설정할 수 있는 최대 정수로 할당
let minNum = Number.MAX_SAFE_INTEGER;
// 그 전에 나온 최솟값과 현재값을 비교하며 최솟값을 할당
for (let i=0; i<arr.length; i++){
minNum = Math.min(arr[i],minNum)
}
//최솟값 찾은 후 indexOf로 인덱스 찾기
const minIndex = arr.indexOf(minNum)
// splice로 제거
arr.splice(minIndex,1)
return arr
}
처음에 sort()로 내림차순으로 만들어서 뒤에 값만 제거하는 날먹을 하려 했지만 리턴하는 배열이 들어올때랑 그 수만 제거했을 때여야 했기 때문에 작은 수를 뺄 수 밖에 없는 상황이 되었다.
같은 팀원이 푼걸 보니까 굳이 최소값을 처음 할당할 때 큰 정수로 하지 않아도 됐다.
function solution(arr) {
// 예외처리
if (arr.length ===1){
return [-1]
}
//최솟값을 arr의 처음 원소로 지정
let minNum = arr[0];
// 처음 원소 뺀것 부터 시작
for (let i=1; i<arr.length; i++){
minNum = Math.min(arr[i],minNum)
}
//최솟값 찾은 후 indexOf로 인덱스 찾기
const minIndex = arr.indexOf(minNum)
// splice로 제거
arr.splice(minIndex,1)
return arr
}
이러면 한개를 덜 할당하고 for문도 1개빼고 시작해서 더 빠르게 된다.
근데 또 팀원중 한분이 더 좋은 방식을 소개해줬다.
function solution(arr) {
// 예외처리
if (arr.length === 1) {
return [-1];
}
//최솟값을 arr 구조분해 할당을 통해 찾음
const minNum = Math.min(...arr);
//최솟값 찾은 후 indexOf로 인덱스 찾기
const minIndex = arr.indexOf(minNum);
// splice로 제거
arr.splice(minIndex, 1);
return arr;
}
확실히 구조분해 할당을 통해 넣으니 훨씬 빨라진다
배열안에 있는 숫자를 이용할 때 for문을 통해 이용할 수 밖에 없다는 생각때문에 구조분해 할당을 생각도 못했다.