제일 작은 수 제거

Gwon SeolHyeong·2020년 4월 24일
0

Day 2

제일 작은 수 제거

세 번째 문제인 제일 작은 수 제거를 학습해 봤습니다.
문제 설명입니다.

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

제한 조건

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

맨 처음 풀어봤을 당시에는

function solution(arr) {
    arr.splice(arr.length - 1, 1);
    
    if(arr[0] === undefined) {
        return [-1];
    } else {
        return arr;
    }
}

이런 형태로 얼추 나왔습니다. 실행에는 문제가 없지만 코드 채점에서 실패가 뜨더군요..
그래서 다른 분들의 풀이도 참고해 봤습니다.

두 가지가 눈에 들어왔습니다.

function solution(arr) {
    arr.splice(arr.indexOf(Math.min(...arr)),1);
    if(arr.length<1)return[-1]; // splice로 제거가 됐기 때문에 길이는 무조건 0
    return arr;
}
function solution(arr) {
    var a=Math.min.apply(null,arr);
    arr.splice(arr.indexOf(a),1);

    if(arr[0]==undefined)
        return [-1];
    else
        return arr;
}

이 두 가지 방법인데 찾아보니 공통점이 두 분 다 프로토타입을 사용하신 거 같았습니다.

첫 번째 코딩에서는 splice를 이용해서 지정된 배열 위치의 항목을 제거시키는 방식인데 indexOf 내부에 Math 문법을 사용해서 가장 작은 항목을 찾아 낸 후 indexOf를 통해서 1이 위치한 위치를 표현해서 splice로 제거를 하는 방식을 사용했습니다.
그 후에는 10이면 배열의 길이는 무조건 0이 되기 때문에 -1을 출력하고 나머지는 4, 3, 2를 출력하는 방식을 사용했습니다.

두 번째는 splice에 한 번에 코딩을 하신게 아니라 a 값을 함수로 우선 지정을 하셨습니다.

function solution(arr) {
    arr.splice(arr.indexOf(Math.min(...arr)), 1);
    
    if (arr.length < 1) {
        return [-1];
    } else {
        return arr;
    }
}

정리해서 이런 방식으로 제출을 했습니다.

이번 문제를 통해서 공부한 문법을 적어보겠습니다.

.splice() : 지정된 위치의 항목이나 범위를 제거할 수 있습니다.
.indexOf() : 항목의 문자나 숫자의 위치를 숫자로 표시해줍니다.
Math : 여러가지 표시법이 있습니다. min은 최소값을 구해줍니다

(...) : 예를 들어 [a1, a2, a3, a4, a5, a6, a7]이라는 배열이 있는데
이 배열을 검색할 때 (1, 2, ...a7) 이런 식으로 사용 가능합니다.
번거롭지 않게 중간을 생략하는거 같습니다.

.apply() : 두 배열을 합쳐서 계산해줄 때 사용합니다
a = [1, 2], b = [3, 4, 5] 일 경우
a.push.apply(a1, a2) => [1, 2, 3, 4, 5] 로 출력이 가능합니다.

스스로 풀려고 하느냐고 한 문제가 쉬워도 아직까지 시간이 너무 많이 들어가지만 스스로 풀 수 있을 때 까지 해보겠습니다~

profile
정보보안 공부

0개의 댓글