Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Today
Total
관리 메뉴

차차로그

[JS] 연습문제 > 제일 작은 수 제거하기 본문

코딩테스트

[JS] 연습문제 > 제일 작은 수 제거하기

차차한 2022. 8. 23. 14:16

function solution(arr) {
        
    var a = arr.map(v => v);
    
    arr.sort((a,b)=>a-b);
    
    a = a.filter((v,i) => a[i] > arr[0]);

    return a.length == 0 ? [-1] : a;
}

이번 문제는 풀면서 실수?가 많았다.

 

실수 1.

처음에는 arr을 내림차순으로 정렬하고 pop()으로 마지막 숫자만 뺀 후 리턴을 했는데 계속 답이 틀렸다고 .... 

분명 테스트케이스는 맞다고 하는데!

생각해보니 arr이 [1,2,3,4]라면 제일 작은 숫자인 1을 빼고 [2,3,4]를 그대로 리턴해야 했다.

그런데 나는 정렬을 시켜버려서 답이 틀렸던 것..

 

실수 2.

위의 실수1을 깨닫고 변수 a에 arr을 저장하고 a와 arr을 비교하려 했다.

그런데 var a = arr 이렇게 변수에 담으면 얕은복사가 되어 arr을 정렬해버릴 때 a의 값도 arr이 정렬된 값처럼 변해버린다.

그래서 filter를 해서 값을 비교해도 a랑 arr의 값이 모두 같으니까 필터링된 값이 없다고 나오는 것....

 

결론

깊은 복사를 위해 map으로 새 배열을 만들어 주었고, arr은 오름차순을 해서 0번 인덱스에 가장 작은 수가 오도록 했다.

a 배열을 필터링해서 a[i]의 값이 arr[0]의 값 즉 가장 작은 수보다 큰 값만 배열에 담기게 했다

a가 [1,2,3,4]고 arr[0]이 1이라면 필터링된 a는 [2,3,4]만 담기게 된다!

배열에 아무것도 없으면 [-1]을 리턴하고 값이 있으면 a자체를 리턴해서 문제 해결

 

연습문제인데도 문제를 푸니까 7점이나 줬다.

테스트케이스가 [4,3,2,1] 이런식으로 있어서 다들 함정에 걸려버린 듯....ㅠ

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

다른 사람 풀이

splice를 사용해서 원하는 인덱스만 잘라낼 수가 있다.

splice(인덱스, 길이) 이렇게 사용하면 되는데, 인덱스의 자리에 Math.min(...arr)을 사용해 arr 배열에서 가장 작은 수를 고르고 arr.indexOf로 그 수의 위치를 찾아냈다.

가장 작은 수 하나만 자르면 되기 때문에 길이에는 1을 입력

Comments