ougi FE

[코딩 테스트] (제일 작은 수 제거하기) 나의 첫 코딩 테스트 트러블 슈팅!! ⚽(+ shift, sort, pop, splice, Math.min) 본문

JavaScript

[코딩 테스트] (제일 작은 수 제거하기) 나의 첫 코딩 테스트 트러블 슈팅!! ⚽(+ shift, sort, pop, splice, Math.min)

ougi 2024. 9. 28. 00:07
728x90

저는 오늘 코딩 테스트를 풀다가 어이없는 실수들을 하면서 제가 했던 실수들을 반성하며 다시 이런 실수들을 하지 않도록 이렇게 글로 남겨보았습니다

먼저 이 문제에 대해서 설명 간단히 설명드리자면 배열 안에 최소 값을 뺀 배열을 return 하는 것인데 만약 최소 값을 빼고 남은 요소가 없으면 -1이 있는 배열을 return 하는 문제였습니다 

이제 제 실수들을 말씀드리며 저의 첫 번째 트러블 슈팅을 시작하겠습니다!!

슛 !!!!!


⚽ 첫 번째 실수 

먼저 제가 했던 첫 번째 실수에 대해서 설명드리겠습니다 
처음 실수는 문제에 이해에 대한 실수였습니다
 
이 문제는 제일 작은 값을 빼지만 배열의 순서가 바뀌면 안 되는 문제였습니다
하지만 테스트 케이스는 내림차순으로 정렬이 되어 있는 것처럼 보여서 이런 실수를 하게 되었습니다
일단 제가 처음에 시도한 코드를 보여드리겠습니다!

function solution(arr) {
    var answer = [];
    arr.sort((A,B)=>A-B).shift()
    return(arr.length < 1? [-1]: arr.sort((A,B)=>B-A));
}

설명을 드리자면 sort를 이용하여 오름차순으로 정렬하여 shift 메서드를 이용하여서 작은 수를 빼주고
마지막에 배열이 비어있는지 확인하고 비어있으면 [-1]을 return, 비어있지 않으면 내림차순으로 정렬된 배열을 return 하게 작성하였습니다

shift()

배열에서 첫 번째 요소를 제거하고, 제거된 요소를 반환합니다

sort()

배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다

⚽ 두 번째 실수

두 번째 실수는 첫 번째 실수를 고치려고 pop 메서드를 사용하였습니다 
하지만 제가 pop 메서드의 사용법을 잘못 알고 있어서 한 번 더 통과하지 못하였습니다

저는 pop 메서드가 해당 값을 찾아서 pop 해준다라고 오해하고 있었습니다 

하지만 pop 메서드의 사용법은 그것이 아니었습니다.....

function solution(arr) {
    arr.pop(Math.min(arr));
    return arr.length<1 ?[-1]:arr;
}
pop()

Array 인스턴스의 메서드로, 배열에서 마지막 요소를 제거하고 그 요소를 반환합니다

⚽ 세번째 실수

그리고 마지막 세 번째 실수....
이게 바로 엄청나게 큰 실수 였습니다....
저는 계속 생각 없이 Math.min에 배열을 통째로 넣고 있었습니다...

function solution(arr) {
    const i = Math.min(...arr); 
    arr.splice(arr.indexOf(i), 1); 
    return arr.length < 1 ? [-1] : arr; 
}

이렇게 spread문법과 splice 메서드를 사용하여서 결국에는 완벽하게 고쳐내는데 성공하였습니다..

Math.min

입력 매개변수로 주어진 숫자 중 가장 작은 숫자를 반환합니다

spread 문법(...)


배열이나 문자열을 함수 호출 시에 필요한 인수나 배열에서 요구되는 요소들로 확장할 수 있게 해줍니다

splice()

메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경합니다

마무리

오늘은 제가 처음으로 트러블 슈팅을 했는데 이상하게 알고 있던 개념도 정리하게 되고 글로 한 번 더 정리하니 참 좋은 경험이었던 것 같습니다 그리고 앞으로는 개념을 더 정확히 하자는 교훈도 얻게 되었습니다
이 글을 쓰면서 저는 https://developer.mozilla.org/en-US/ 이 공식문서로 정리하였습니다 사용법, 예시들이 잘 정리되어 있으니 참고하시면 좋을 것 같습니다 !

728x90