프로그래머스 문제풀이/Level 1

[프로그래머스] 제일 작은 수 제거

류시명 2020. 4. 4. 19:38

문제

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

제한 조건

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

접근

  1. 주어진 배열 내 최소값을 구한다.
  2. 해당 값을 지운다.
  3. 지웠을 때 배열의 길이가 0이면 -1채워서 리턴한다.

구현

const solution = arr => {
    // 배열 초기화
    let answer = [...arr];
    // 배열 내 임의 요소로 최소값 초기화
    let min = answer[0];

    // 최소값 설정
    for (let num of answer) {
        if (min > num) min = num;
    }

    // 최소값 제거
    const idx = answer.indexOf(min);
    answer.splice(idx, 1);

    // 빈 배열이면 -1 채워서 리턴
    if (answer.length === 0) {
        answer.push(-1);
    }
    return answer;
};

다른 풀이

다른 사람들의 풀이를 참고하다보니 Math.min()이나 Math.max()에 파라미터를 두 개 이상 줘도 된다는 걸 알았다.

왜 꼭 두 개를 줘야 한다고 생각했을까... 아무튼 삼항 연산자 등을 활용해서 다시 풀어봤다.

const solution = arr => {
    let answer = [...arr];
    // 주어진 배열 내 최소값 찾기
    const min = Math.min(...answer);
    // 최소값 제거
    const idx = answer.indexOf(min);
    answer.splice(idx, 1);
    // 빈 배열일 때 처리
    return answer.length === 0 ? [-1] : answer;
};
반응형