코딩테스트/프로그래머스 기초 트레이닝

[Javascript] 첫 번째로 나오는 음수 - findIndex() find() indexOf()

dev_swH 2023. 5. 17. 16:40

문제 설명

정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.

 

음수를 찾아서 그 요소의 인덱스를 찾는다는 절차까지는 바로 생각해냈다.

그래서 처음에는 아래와 같이 풀이했다.

function solution(num_list) {
    const answer = num_list.indexOf(num_list.find((num) => Math.sign(num) === -1));
    return answer;
}

Math.sign()

Math.sign() 함수는 주어진 수가 음수인지 양수인지 0인지 판별해서 각각 -1 / 1 / 0으로 반환해주는 함수다.

사용 방식 :
Math.sign(숫자)

 

find()

배열 콜백 함수.

주어진 판별 함수를 만족하는 첫 번째 요소 을 반환하고, 만약 그런 요소가 없다면 undefined를 반환한다.

맨 첫 번째만 반환하기 때문에 여러 개의 요소를 뽑아낼 때는 못 쓴다. 은근히 헷갈리니까 주의...

대신에 배열이 아니라 값으로 반환해주기 때문에

개인 프로젝트 당시 깊이가 깊은 JSON에서 필요한 걸 뽑아낼 때 filter()보다 사용하기 편리했던 경험이 있다.

사용 방식 :
find((현재 요소값) => 실행할 함수. 보통 조건문의 표현식처럼 작성)

Ex] find(element => element > 10);

 

indexOf()

배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환한다.

만약 존재하지 않으면 -1을 반환한다.

사용 방식 :
indexOf(찾을 요소)
indexOf(찾을 요소, 검색 시작할 인덱스)

 

이렇게 메소드를 3개나 써서 풀었는데 알고 보니..........

그냥 findIndex() 메소드를 쓰면 한 방에 끝나는 거였다ㅠㅠ

function solution(num_list) {
    return num_list.findIndex((num) => num < 0);
}

findIndex()

find() 메소드와 똑같이 주어진 함수에 맞는 첫 번째 요소를 찾아준다.

find는 값을 반환해주는 메소드고, findIndex는 인덱스를 반환해주는 메소드다.

그래서 만족하는 요소가 없을 경우 findIndex는 undefined가 아니라 indexOf처럼 -1을 반환한다.