본문 바로가기

Algorithm

[알고리즘] #26 제일 작은 수 제거하기 | 프로그래머스

728x90

프로그래머스 제일 작은 수 제거하기 알고리즘 문제.

 

https://programmers.co.kr/learn/courses/30/lessons/12935

 

코딩테스트 연습 - 제일 작은 수 제거하기

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

programmers.co.kr

 

 

 


 

 

     

     

     

    문제 설명

     

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

     

     

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

     

    입출력 예

     

     

     


     

    코드 실행에서는 통과하나, 테스트 케이스에서 오류나는 경우

     

    let arr = [10];
    
    solution(arr);
    
    function solution(arr) {
        arr = arr.sort((a,b) => b - a);
        arr.pop();
          
        if (arr.length === 0) {
          arr.push(-1)
          return arr;
        } else {
          return arr;
        }
    }

     

    찾아보니 sort() 메소드를 사용하면 테스트 케이스의 조건 때문에 실패가 난다고 한다. sort()를 이용하지 않고 다른 방법을 찾아야했다.

     

     

     


     

    다른 방법을 이용해 풀어보기. 

     

    spread syntax : 배열의 엘리먼트 하나 하나 값을 훑는다. [1, 2, 3] 이 있다면 1, 2, 3 을 꺼내서 보여줌. 배열 외에도 반복할 수 있는 것들(문자열)은 다 꺼낼 수 있다.

    Math.min() : ()안에 숫자를 넣으면 가장 작은 값을 알려준다.

    indexOf() : ()안에 엘리먼트를 넣으면 index번호를 알려준다.

    .splice() : ()안에 인덱스번호, 얼마나 자르고 싶은지, 추가하고 싶은 거 1, 추가하고 싶은 거 2.. 순서대로 넣으면 잘라주거나 추가해주기도 한다.

    더보기

    .splice() syntax

    array.splice(index, howmany, item1, ....., itemX

    정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
    // let arr = [4,3,2,1];
    let arr = [10];
    
    solution(arr);
    
    function solution(arr) {
      if (arr.length <= 1) return [-1];
      let smallnum = Math.min(...arr);
      let smallindex = arr.indexOf(smallnum);
      arr.splice(smallindex, 1);
      return arr;
    }

     

    arr element가 하나이거나 빈 배열이면 -1을 리턴해주어야한다. 미리 맨 윗 줄에서 이 경우의 조건을 검사해서 리턴해준다. 다음으로는 ... 라는 spread 문법을 사용해서 배열 안의 숫자들을 하나 하나씩 훑을 수 있게 한다. 그래서 그 훑은 숫자들 중에서 Math.min을 사용하여 가장 작은 숫자가 무엇인지 판별하여준다. 다음으로는 그 숫자의 index 번호를 구한다. 마지막으로 그 index번호의 엘리먼트를 제거해준다.

     

     

     


     

     

    다른 사람들은 어떻게 풀었을까?

     

    https://programmers.co.kr/learn/courses/30/lessons/12935/solution_groups?language=javascript&type=all 

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

     

     

     

     

     

     

     

     

     

     

     

     

    참고하면 좋은 글

    spread syntax https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

    Math.max() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/max 

    Math.min() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/min 

    가장 작은 수 제거하기 https://miracleground.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-1%EB%8B%A8%EA%B3%84-%EA%B0%80%EC%9E%A5-%EC%9E%91%EC%9D%80%EC%88%98-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0-with-javascript

    array.indexOf() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

    arr.splice() https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

    728x90