Q. 정수를 저장한 배열, arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를 들어 arr이 [4, 3, 2, 1]인 경우 [4, 3, 2]를 리턴하고 [10]이면 [-1]를 리턴합니다.
제한 조건
- arr은 길이 1이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j 이면, arr[i] ≠ arr[j] 입니다.
입출력 예
arr | return |
[4, 3, 2, 1] | [4, 3, 2] |
[10] | [-1] |
< 내가 푼 답 >
function solution(arr) {
if(arr.length <= 1) return [-1];
const min = Math.min(...arr);
const newArr = arr.filter((num) => num !== min );
return newArr;
}
함수의 동작 방식:
- 먼저 배열의 길이가 1 이하인지 확인하고 만약 1 이하라면 [-1]을 반환한다.
- Math.min(...arr)를 사용해 배열에서 가장 작은 수를 찾는다.
- filter() 메소드를 사용해 최솟값과 같지 않은 모든 요소를 새 배열로 만든다. 이렇게 하면 가장 작은 수가 정확히 제거된다.
- 필터링 된 새 배열을 리턴한다.
< 다른 사람의 풀이 >
function solution(arr) {
if (arr.length <= 1) return [-1];
let minIndex = 0;
for (let i = 1; i < arr.length; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
}
arr.splice(minIndex, 1);
return arr;
}
함수의 동작 방식:
- 먼저 배열의 길이가 1 이하인지 확인하고, 1 이하라면 [-1]을 반환한다.
- minIndex를 0으로 초기화하여 최소값의 인덱스를 저장할 준비를 한다.
- for문을 사용해 배열을 순회하면서 가장 작은 요소의 인덱스를 찾는다. 현재 요소가 minIndex에 있는 요소보다 작다면, minIndex를 현재 인덱스로 업데이트 한다.
- 반복문이 끝나면 minIndex에는 배열에서 가장 작은 요소의 인덱스가 저장된다.
- splice() 메소드를 사용하여 minIndex 위치의 요소를 제거한다. 이 메소드는 원본 배열을 직접 수정한다.
- 수정된 배열을 리턴한다. 이 배열은 원래 배열에서 가장 작은 요소가 제거된 상태이다.
'알고리즘' 카테고리의 다른 글
알고리즘 코드카타 (약수의 개수와 덧셈) (1) | 2024.08.30 |
---|---|
알고리즘 문제(자연수를 뒤집어 배열로 만들기) (0) | 2024.08.12 |
문자열 길이 문제풀기 (1) | 2024.07.23 |
내일배움캠프 여섯번째 발걸음 (1) | 2024.07.09 |
내일배움 캠프 다섯번째 걸음 (0) | 2024.07.08 |