[프로그래머스] "첫 번째로 나오는 음수" : JS - forEach() 내 return 불가, findIndex() 사용

신혜린·2023년 8월 11일
0

알고리즘(javascript)

목록 보기
17/21
post-thumbnail

첫 시도

function solution(num_list) {
  num_list.forEach((x, idx) => {
    if (x < 0) return idx
  })
}
  • forEach 문을 사용해 배열 안 요소를 하나씩 순회하다가 0보다 작은 음수의 값을 발견하게 되면 해당 값의 인덱스를 반환하도록 의도함.
  • 하지만 forEach 함수를 사용할 때는 순회 도중에 리턴하는 게 불가하다고 한다. return후 forEach문을 빠져나오지 않고 마치 'continue'처럼 동작하는 것. 그렇기 때문에 위의 문제의 경우 forEach 문이 아니라 반복문을 사용해서 푸는 게 더 옳다.

나의 풀이

function solution(num_list) {
    for (i = 0; i < num_list.length; i++) {
        if (num_list[i] < 0) {
            return i
        } 
    }
    return -1
}
  • num_list 안의 0번째 인덱스부터 마지막 인덱스까지 하나씩 반복해서 돌다가 0보다 작은 값을 만나게 되면 해당 인덱스를 리턴
  • 그게 아니면 -1을 리턴
    -> 처음에 이 조건을 if-else 문으로 두려고 했으나 모든게 0보다 큰 인덱스가 하나라도 있으면 전부 -1을 반환하는 문제를 발견하게 되고 아예 for문 밖으로 두었다.

모범답안

const solution = num_list => num_list.findIndex(v => v < 0)
  • findIndex 함수를 사용해서 0보다 작은 요소를 만나면 바로 해당 요소의 인덱스를 반환

💡 특정 값의 인덱스를 반환해야한다는 것을 보고 indexOflastOfIndex 만 생각했는데 findIndex도 열심히 생각해내서 써야겠다!

profile
개 발자국 🐾

0개의 댓글