알고리즘_제일 작은 수 제거하기

정재연·2022년 1월 19일
0

알고리즘

목록 보기
9/23

제일 작은 수 제거하기

1. 문제 설명

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

2. 제한 조건

arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

3. 입출력 예

arrreturn
[4,3,2,1][4,3,2]
[10][-1]

4. 나의 문제 풀이

function solution(arr) {
    let answer = [];
    let small = arr.sort()[0]
    
    if(arr.length === 1){
      answer[0]=-1
    } else {
      answer = arr.filter((list)=>{
        return list !== small
      })
    }
}

배열과 객체의 참조 개념을 인식하지 못하고 그대로 복사를 해서
원본이 같이 변경 되어, 원하는 결과를 낼 수 없었다.

그래서 찾아본 결과
문자, 숫자, 그리고 boolean 은 참조의 개념이 존재하지 않지만,
객체와 배열은 데이터 불변성을 유지시키기 위해 참조의 개념이 존재한다.

객체에서 = 을 통해 복사하게 된다면, 복사가 아닌 참조가 된다.

function solution(arr) {
    let answer = [];
    let small = arr.slice("").sort()[0]
    
    if(arr.length <= 1){
      return [-1]
    } else {
      arr.splice(arr.indexOf(small),1)
      return arr
    }
}

위처럼 풀었는데 테스트 케이스 2,5,6 번에서 실패되었다.(왜.. 왜...😮‍💨)

*추가
sort()안에 오름차순을 해주지 않아서 에러가 났다.
➀ sort()함수 안에 파라미터가 입력 되지 않으면 유니코드 순서대로 반환한다.
➁ 숫자 크기대로 정렬하기 위해서 함수 안에 파미터로 정의해주면 되었다.

let arr = [1,4,10,20]
➀ 👉🏻 arr.sort();     		// [ 1, 10, 20, 4 ]
➁ 👉🏻 arr.sort((a,b)=> a-b)	// [ 1, 4, 10, 20 ]

function solution(arr) {
    let answer = [];
    let small = arr.slice((a,b)=>a-b).sort()[0]
    
    if(arr.length <= 1){
      return [-1]
    } else {
      arr.splice(arr.indexOf(small),1)
      return arr
    }
}
// success 😎

5. 다른 사람들의 문제 풀이

다른 방법을 찾아본 결과.
Math.min()를 사용하여 해결 한 답안을 보았다.
Math.min()으로 사용하여 sort를 이용해 배열을 변경해 줄 필요 없이 바로 작은 수의 요소를 찾아 낼 수 있었다.

function solution(arr) {
    let answer = [];
    
    if(arr.length <= 1){
      return answer =  [-1]
    } else {
      arr.splice(arr.indexOf(Math.min(...arr)),1)
     return answer = arr
    }
}
function solution(arr) {
  let copyArr = arr.slice();
  if(arr.length <= 1) return [-1];
  copyArr.sort((a, b) => a - b);
  let remove = copyArr.shift()
  arr.splice(arr.indexOf(remove),1)
  return arr;
}
// 이 문제 풀이를 보고 기존 오류냈던 내 답안을 해결 할 수 있었다.
// 땡큐
profile
코린이 개발자 :)

0개의 댓글