나의 오류)
1. 일단 문제를 보고 왜 배열 안에 [10]이라고 있는데 -1이지? 생각했다.
위의 경우를 보고 arr.length == 0 || arr.length == 1이라 작성해
arr.length == 1 경우 때문에 계속 실패가 떳다.
다시 문제를 보니깐, 린턴하려는 배열이 빈 배열인 경우!
즉, 가장 작은 수가 제거된 배열이 빈 배열인 경우!
-1을 채워 리턴하는 문제였다...
2. 입출력 예시의 [4, 3, 2, 1]의 결과가 [4, 3, 2]여서
모든 결과가 내림차순 정렬이 돼야 하는줄 알고
sort((a, b)=> a - b)로 오름차순 정렬 후
slice(1, arr.lenght + 1)로 가장 작은 값을 제거하고
reverse()함수를 사용했다...
(모든 예시가 정렬 돼 있지 않다...)
그럼! 배열의 특정 값만 지워야 하는데
이때 사용될 함수를 찾아봐야 했다.
찾아본 결과 splice()함수가 존재했다.(내용이 많아서 글을 긁어 옴)
splice() 함수
slice() 함수의 이름에서 알파벳 p가 하나 더 있는 splice() 함수는 다목적으로 사용할 수 있는 함수인데요. 이 함수로는 배열로 부터 특정 범위를 삭제하거나 새로운 값을 추가 또는 기존 값을 대체할 수 있습니다. 첫번째 인자로 시작 인덱스(index), 두번째 인자로 몇개의 값을 삭제할지, 그리고 세번째 인자부터는 추가할 값을 가변 인자로 넘길 수 있으며, 삭제된 값을 담고 있는 배열을 반환합니다.
역시 위와 동일한 방법으로 nums라는 숫자 배열을 생성해놓고 실습을 시작하겠습니다.
> nums = Array(20).fill().map((_, i) => i)
< [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
이 숫자 배열에서 인덱스 5가 가리키는 값부터 3개의 값을 삭제해보겠습니다.
> nums.splice(5, 3)
< [5, 6, 7]
> nums
< [0, 1, 2, 3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
삭제된 3개의 값을 담고 있는 배열이 반환되며, 원본 배열로 부터 3개의 값이 빠져나간 것을 알 수 있습니다.
이번에는 인덱스 5가 가리키는 값부터 아무 값도 삭제하지 않고, -5, -6, -7을 추가해보겠습니다.
> nums.splice(5, 0, -5, -6, -7)
< []
> nums
< [0, 1, 2, 3, 4, -5, -6, -7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
삭제된 값이 없으므로 빈 배열이 반환되고, 이전에 값이 삭제된 자리에 -5, -6, -7을 들어간 것을 알 수 있습니다.
이번에는 인덱스 10이 가리키는 값부터 2개의 값을 -10, -11로 대체해보겠습니다.
> nums.splice(10, 2, -10, -11)
< [10, 11]
> nums
< [0, 1, 2, 3, 4, -5, -6, -7, 8, 9, -10, -11, 12, 13, 14, 15, 16, 17, 18, 19]
삭제된 2개의 값을 담고 있는 배열이 반환되며, 원본 배열의 10, 11이 있던 자리에 -10, -11에 들어가 앉아있는 것을 볼 수 있습니다.
splice() 함수에 첫번째 인자만 넘기면 해당 인덱스가 가리키는 값을 포함해서 배열의 마지막 값까지 삭제가 됩니다.
> nums.splice(15)
< [15, 16, 17, 18, 19]
> nums
< [0, 1, 2, 3, 4, -5, -6, -7, 8, 9, -10, -11, 12, 13, 14]
splice() 함수 첫 번째 인자로 0을 넘기면 배열에 있는 모든 원소를 삭제되겠죠?
> nums.splice(0)
< [0, 1, 2, 3, 4, -5, -6, -7, 8, 9, -10, -11, 12, 13, 14]
> nums
< []
splice() 함수를 사용할 때 가장 주의할 부분은 삭제된 값을 담고 있는 새로운 배열이 반환될 뿐만 아니라 원본 배열에도 변경이 가해진다는 점입니다. 따라서 의도치 않은 데이터 유실이나 변경으로 이어질 수 있으니 특히 데이터의 불변성(immutability)이 보장되어야 하는 프로그램을 작성할 때 주의하셔야 합니다.
위의 내용에서 처럼 값을 제거하거나, 삽입하는 용도로 사용됐다.
이제 가장 작은 값을 찾아야 하는데 이때는 indexOf()나 lastIndexOf()와 Math.min() 함수를 사용하면 됐다.
배열 특정 값 위치(index) 찾기 - indexOf(), lastIndexOf()
1. indexOf()와 lastIndexOf() 함수 소개
indexOf()
arr.indexOf(searchElement[, fromIndex])
배열 안에서 찾으려는 값(searchElement)과 정확하게 일치(===)하는 '첫번째' element의 index를 리턴합니다.
만약, 찾으려는 값이 배열에 없으면 -1을 리턴합니다.
fromIndex를 파라미터로 전달하면, fromIndex부터 값을 찾습니다.
파라미터
searchElement
찾으려는 값
fromIndex
검색을 시작할 index
입력하지 않으면 0부터 검색을 시작합니다.
리턴값
배열에서 searchElement와 값이 정확하게 일치하는 첫번째 index를 리턴합니다.
찾으려는 값이 배열에 없으면 -1을 리턴합니다.
lastIndexOf()
arr.lastIndexOf(searchElement[, fromIndex])
배열 안에서 찾으려는 값(searchElement)과 정확하게 일치(===)하는 '마지막' element의 index를 리턴합니다.
만약, 찾으려는 값이 배열에 없으면 -1을 리턴합니다.
fromIndex를 파라미터로 전달하면,
fromIndex부터 역방향으로(index값을 줄여나가면서) searchElement와 같은 값을 찾아서
첫번째로 같은 값을 가지는 index를 리턴합니다.
fromIndex값이 입력되지 않으면, 기본값은 (배열의 길이-1) 입니다.
즉, fromIndex값을 입력하지 않으면, lastIndexOf 함수는 배열의 끝에서부터 역방향으로 배열을 탐색하여
searchElement와 같은 값을 가지는 최초의 index값을 리턴하는 것입니다.
파라미터
searchElement
찾으려는 값
fromIndex
검색을 시작할 index
입력하지 않으면 arr.length-1 index부터 검색을 시작합니다.
리턴값
배열에서 searchElement와 값이 정확하게 일치하는 마지막 index를 리턴합니다.
찾으려는 값이 배열에 없으면 -1을 리턴합니다.
마지막으로 Math.max와 Math.min 함수를 살펴보면
으로 사용할 수 있었다.
제출한 코드 :
function solution(arr)
{
arr.splice(arr.indexOf(Math.min(...arr)),1);
return arr.length == 0 ? [-1] : arr
}
'문제 풀기 > JavaScripts' 카테고리의 다른 글
문제 31. 수박수박수박수박수박수?(repeat, slice) (0) | 2024.07.18 |
---|---|
문제 30. 가운데 글자 가져오기(문자열[]->문자) (0) | 2024.07.18 |
문제 28. 없는 숫자 더하기 (0) | 2024.07.18 |
문제 27. 핸드폰 번호 가리기(repleat, slice) (0) | 2024.07.16 |
문제 26. 음양 더하기(reduce 복습) (0) | 2024.07.16 |