728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12935
JS
문제
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 조건
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
계획
배열의 길이가 1 이하면 -1 반환
Math.min, findIndex 써서 최소값 찾아 제거하고 배열 반환하기
참고, 풀이
return arr.splice(arr.findIndex(Math.min(...arr)),1)
에러.
findIndex 사용방법이 틀렸음
let index = arr.findIndex(num => num > 25);
-1이 아니라 [-1]을 반환해야
성공
let arr = [5, 10, 33, 234, 66];
let arr1 = [55];
function solution(arr) {
if (arr.length <= 1) {
return [-1];
} else {
let minA = Math.min(...arr);
let indexA = arr.findIndex((i) => i === minA);
arr.splice(indexA, 1);
return arr;
}
}
console.log(solution(arr));
이제 줄이기
function solution(arr) {
if (arr.length <= 1) {
return [-1];
} else {
return arr.splice(arr.findIndex((i) => i === Math.min(...arr)),1);
}
}
실패
arr.splice()는 삭제된 값을 반환하므로, 수정된 배열을 반환하려면 arr 자체를 반환해야 합니다.
... 줄이긴 줄였는데 뭔가 많이 잘못된듯
function solution(arr) {
if (arr.length <= 1) {
return [-1];
} else {
arr.splice(
arr.findIndex((i) => i === Math.min(...arr)),
1
);
return arr;
}
}
시간 복잡도가 O(n^2) (최악의 경우)나옴... filter쓰는게 시간복잡도 적게 나옴
답
function solution(arr) {
if (arr.length <= 1) {
return [-1];
} else {
let minA = Math.min(...arr);
let filterA = arr.filter((i) => i !== minA);
return filterA;
}
}
코드 간략화하기
function solution(arr) {
if (arr.length <= 1) return [-1];
const min = Math.min(...arr); // 최소값 찾기 (O(n))
return arr.filter((num) => num !== min); // 새로운 배열 생성 (O(n))
}
참고
배열에서 원하는 인덱스 삭제: https://devbirdfeet.tistory.com/218
'내일배움 과제 > 기타 과제' 카테고리의 다른 글
알고리즘 31번 - 수박수박수박수박수박수? (0) | 2024.12.10 |
---|---|
알고리즘 30번 - 가운데 글자 가져오기 (0) | 2024.12.09 |
알고리즘 28 - 없는 숫자 더하기 (0) | 2024.12.05 |
알고리즌 27 핸드폰 번호 가리기 (1) | 2024.12.04 |
알고리즘 26번 - 음양 더하기 (0) | 2024.12.03 |