내 맘대로 공부
article thumbnail

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 값을 가지며 검색은 동일하게 왼쪽 -> 오른쪽으로 검색된다.

음수를 사용하는 경우는 별로 없을 것 같으니 차이점만 잘 알아두면 될 것 같다.

profile

내 맘대로 공부

@곰도리도리잼

잘못된 정보가 있다면 알려주세요 🧸