제일 작은 수 제거하기

Daisy🌼·2022년 6월 5일
0

📝 제일 작은 수 제거하기

문제 링크

나의 풀이

function solution(arr) {
    // 예외 처리
    if(arr.length === 1) return [-1];
    // spread operator로 제일 작은 수를 찾는다.
    let min = Math.min(...arr);
    // 제일 작은 수가 아닌 숫자들을 배열에 담아 리턴한다.
    return arr.filter((num)=> num !== min);
}
  • 우선 문제의 요구사항에 따라 배열의 길이가 1일 경우의 예외 처리를 해주었습니다.

  • 제일 작은 수를 찾기 위해 Math.min() 메서드를 사용하고, spread 연산자로 arr의 요소들을 전달해주었습니다.

  • Math.min()는 값들을 배열 형태로 받지 않기 때문에 배열의 요소들을 전달하기 위해서는 spread 연산자를 사용해 펼쳐주어야 합니다. (Math.max()도 동일하게 사용합니다.)

  • 마지막으로 filter() 메서드를 사용해 가장 작은 수가 아닌 것들만을 담은 배열을 리턴합니다.

다른 풀이

function solution(num){
  	// 예외 처리
	if(arr.length === 1) return [-1];
  	// splice()와 indexOf()를 사용해 원본 배열에서 제거한다.
  	arr.splice(indexOf(Math.min(...arr)), 1);
  	return arr;
}
  • 예외 처리는 동일합니다.

  • 사실 이 풀이는 splice() 메서드를 사용한 점이 참신해서 가져왔습니다. splice() 메서드는 배열의 요소를 시작 인덱스부터 원하는 개수만큼 제거하거나, 제거한 다음 새로운 요소를 추가할 때 주로 사용합니다.

⭐️ 기본적인 splice() 사용법
splice(시작 인덱스, 제거할 요소의 개수) 또는
splice(시작 인덱스, 제거할 요소의 개수, 추가할 요소)

  • 따라서 위의 문제에서는 Math.min()의 결과값 즉 제일 작은 수의 인덱스를 indexOf()로 찾고, 해당 인덱스를 시작으로 1개를 제거하면 시작 인덱스의 값만 제거가 됩니다. 마지막으로 제거된 배열을 리턴합니다.

⭐️splice()는 원본 배열의 내용을 직접 변경합니다. 반면에 비슷하게 생긴 slice()는 원본 배열을 직접 변경하지 않고 복사본 배열을 반환합니다. 따라서 splice()를 사용할 경우 원본 배열을 반환하도록 합니다. 생김새가 비슷하지만 리턴값에서 차이가 나타나므로 사용할 때 주의합니다.

정리

  • filter()도 괜찮은 방법이지만, splice()를 활용해볼 수 있는 문제였습니다.

참고 자료

profile
커피와 재즈를 좋아하는 코린이 | 좋은 글 좋은 코드를 쓰고 싶습니다

0개의 댓글