728x90

findIndex() 포스팅에서 알아본 findIndex()함수를 사용하는 간단한 예제가있어 정리해보고자 합니다.

 

 

문제설명

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

 

제한사항

  • 5 ≤ num_list의 길이 ≤ 100
  • -10 ≤ num_list의 원소 ≤ 100

 

입출력 예 & 설명 

  • 입출력 예 #1
    • 5번 인덱스에서 음수가 처음 등장하므로 5를 return합니다.
  • 입출력 예 #2
    • 음수가 없으므로 -1을 return합니다.

 

나의 풀이

 

먼저 findIndex()함수를 모르기도 했고, 기본적인 for문을 사용하지 않고, reduce()함수를 사용해보았습니다.

index를 새로운 배열에 넣기위해서 초기값을 빈 배열로 설정해주고, 정수 리스트 arr을 받아 reduce()함수를 사용하여 현재 값 value가 0보다 작은 음수일 경우에 누적값 acc배열에 push를 해주었습니다.

 answer = nn[0] > 0 ? nn[0] : -1;

 

처음에는 7번 째 줄에서 위와같이 0보다 큰경우로 조건을 설정해주었는데 케이스 4, 13이 오류가 발생하여 원인을 확인해 본 결과 [-1,2,3,4,5] 와 같은 배열이 있을 때 0번 째 배열이 음수이면 7번째 줄에서의 반환값은 0보다 크지 않으므로 -1 을 반환하게 됩니다. 따라서 0보다 크거나 같을 때로 부등호를 설정해주었습니다.

 

다른 풀이 

■ 일반적인 for문 사용

 

마찬가지로 동일한 구조로 0부터 시작해서 정수 배열 리스트의 끝까지 반복 합니다. 만약 i번째 값이 음수이면 해당 index를 반환해주고, 아니라면 -1을 반환하는 for문을 아주 기본적인 문제입니다.

 


■ findIndex() 사용

 

findIndex() 함수를 사용하여 해당 배열에서 0보다 작은 즉 음수를 만족하는 요소의 Index를 반환받습니다.

 


■ filter() 사용

 

filter() 함수는 특정 조건을 만족하는 새로운 배열을 반환하는 메서드입니다. 양수인 값만 true이기 때문에 해당 값을 nn이라는 새로운 배열에 할당해줍니다. 그러면 입출력 예 # 1 의 idx값은  -2이고,  #2의 idx값은 undefined입니다. 이 값을 indexOf() 함수를 사용하여 주어진 num_list에서 idx의 값과 동일한 값을 찾아 반환 합니다. 이때 indexOf()의 특성에 따라서 찾는 값이 없으면 -1을 반환합니다.