제일 작은 수 제거하기
설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는
함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔
배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는
[4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 사항
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
입출력 예
arr | return |
---|---|
[4,3,2,1] | [4,3,2] |
[10] | [-1] |
정답 풀이
function solution(arr) {
let i = arr.indexOf(Math.min(...arr))
arr.splice(i, 1)
return arr.length==0 ? [-1] : arr
}
해설
이번 문제는 배열에서 가장 작은 부분을 삭제하는 문제입니다. 삭제는
많이 안해봐서 살짝 어려웠습니다. 하지만 이전 문제에서 사용했던
문법들을 이용하여 어렵지 않게 배열에서 가장 작은 수를 찾을 수
있었습니다. 하지만 이 수를 삭제시키고 나머지 요소들을 반환하는 것이
고민거리 였는데요 배열을 삭제 시키는 메소드는 대표적으로 splice,
shift, pop, filter 등이 있습니다. 이중에 원하는 위치의 배열을 삭제
할 수 있는 건 splice로 특정위치의 배열의 요소를 삭제할 수 있습니다.
우리는 indexOf를 사용하여 가장 작은 수가 존재하는 배열의 인덱스 값을
알았습니다. 그러면 splice의 파라미터중 첫번째 부분에 인덱스 값을
저장한 변수 i를 넣어주고 두번째 인자로 1을 넣어서 arr에서 i번째 요소
하나만 삭제합니다. 그리고 10일 때는 배열의 길이가 0일때 [-1]을
반환하고 false라면 arr을 반환하는 삼항 연산자를 사용하여
처리하였습니다.
배열삭제 문제는 까다로운거 같습니다.. 겨우 푸니까 9점 씩이나 주네요
다른사람 풀이
function solution(arr) {
const min = Math.min(...arr);
return arr.length !== 1 ? arr.filter(i => i !== min) : [-1]
}
해설
이 문제는 filter을 사용하여 배열을 제거하였습니다.
Math.min(...arr)을 사용하여 배열의 최솟값을 찾고 삼항연사자로 [-1]을
출력해야하는 예외처리도 해주었습니다. 그리고 filter 메소드를
사용하여 최솟값과 다른 배열의 요소들만 출력하도록 하여서 풀었습니다
코드 길이도 간소화되고 퍼포먼스적으로 훨씬 좋습니다. filter문법을
몰라서 못풀었는데 공부해보겠습니다...
요즘 아침에 몰아서 올리는데 역시 벼락치기가 짱인듯 합니다.. 위기의 순간에 머리가 잘돌아가..
'프로그래머스' 카테고리의 다른 글
[programmers]x만큼 간격이 있는 n개의 숫자 (1) | 2022.11.21 |
---|---|
[programmers] 가운데 글자 가져오기 (2) | 2022.11.18 |
[programmers]콜라츠 추측 (2) | 2022.11.16 |
[programmers]두 정수 사이의 합 (2) | 2022.11.15 |
[programmers] 문자열을 정수로 바꾸기 (3) | 2022.11.14 |