Q. ... 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
ex) 입출력 예시
| emergency | result |
| [3, 76, 24] | [3, 1, 2] |
| [1, 2, 3, 4, 5, 6, 7] | [7, 6, 5, 4, 3, 2, 1] |
Thinking Process
emergency 배열을 정렬하고 정렬한 배열을 sorted라고 했을 때, sorted랑 emergency 배열의 각 요소를 비교해서 같으면 sorted의 인덱스 값을 추출하면 되겠다 !
Code
case 1) findIndex
function solution(emergency) {
let sorted = [...emergency].sort((a, b) => b - a);
return emergency.map((el) => sorted.findIndex((v) => v === el) + 1);
}
sort 메서드에서 b - a로 내림차순 정렬을 해주어 각 인덱스 값이 순위가 되도록 만든 다음 emergency의 각 요소와 sorted의 각 요소를 비교해서 같은 값의 인덱스 값을 1을 더해서 출력하도록 한다.
사실 findIndex 메서드를 몰라서 한참을 헤매다가 작성했다 🫠
case 2) indexOf
function solution(emergency) {
let sorted = [...emergency].sort((a, b) => b - a);
return emergency.map((el) => sorted.indexOf((el) + 1);
}
findIndex와 함께 발견한 메서드 ! 문제에 적용시켜보았는데 이 문제에는 indexOf를 사용하는게 더 깔끔한 것 같다.
New
Array.prototype.findIndex()
Array.prototype.findIndex()
findIndex() 메서드는 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환합니다.
만족하는 요소가 없으면 -1을 반환합니다.
arr.findIndex(callback(element[, index[, array]])[, thisArg])
- callback : 3개의 인수를 취하여 배열의 각 값에 대해 실행할 함수.
- element : 배열에서 처리중인 현재 요소.
- index : 배열에서 처리중인 현재 요소의 인덱스.
- array : findIndex 함수가 호출된 배열.
- thisArg : 선택 사항. 콜백을 실행할 때 this로 사용할 객체.
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array1.findIndex(isLargeNumber));
// Expected output: 3
위의 코드는 array1의 요소 중 13보다 큰 첫 번째 요소를 출력하도록 하는 코드로, 마치 map 처럼 array1의 요소들을 각각 돌면서 13보다 큰지 검사하며 13보다 큰 요소가 있으면 더 이상 진행하지 않고 해당 요소의 인덱스 값을 반환한다.
Array.prototype.indexOf()
Array.prototype.indexOf()
indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환합니다.
findIndex와 동일한 기능을 하지만 사용 방법이 조금은 다른 indexOf() 메서드가 있다.
arr.indexOf(searchElement[, fromIndex])
- searchElement : 배열에서 찾을 요소
- fromIndex (Optional) : 검색을 시작할 색인. 인덱스가 배열의 길이보다 크거나 같은 경우 -1이 반환되므로 배열이 검색 x. 제공된 색인 값이 음수이면 배열 끝에서부터의 오프셋 값으로 사용
* 참고 : 제공된 색인이 음수이면 배열은 여전히 앞에서 뒤로 검색. 계산된 인덱스가 0보다 작으면 전체 배열 검색.
기본값 : 0 (전체 배열 검색).
const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
console.log(beasts.indexOf('bison'));
// Expected output: 1
// Start from index 2
console.log(beasts.indexOf('bison', 2));
// Expected output: 4
console.log(beasts.indexOf('giraffe'));
// Expected output: -1
두 번째의 경우를 설명해보자면, 인덱스 값 2번 즉 'camel' 을 시작으로 'bison' 값을 찾는다는 이야기이다. 검색은 항상 왼쪽에서 오른쪽으로 실행되므로 bison의 인덱스 값이 4가 나오는 것이다.
만일 fromIndex 값이 음수라면 배열 끝에서부터 -5 -4 -3 -2 -1 값을 가지며 검색은 동일하게 왼쪽 -> 오른쪽으로 검색된다.
음수를 사용하는 경우는 별로 없을 것 같으니 차이점만 잘 알아두면 될 것 같다.
'Algorithm Solution > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 합성수 찾기 (0) | 2023.01.27 |
|---|---|
| [프로그래머스] 가장 큰 수 찾기 (0) | 2023.01.26 |
| [프로그래머스] 외계행성의 나이 (0) | 2023.01.25 |
| [프로그래머스] 주사위의 개수 (0) | 2023.01.25 |
| [프로그래머스] 가위 바위 보 (0) | 2023.01.24 |
