[자바스크립트/알고리즘] 프리코드캠프(FCC) - Drop it : 함수가 true일 때 까지 요소 제거 (shift)
728x90

문제

배열이 주어지면 첫 번째 요소(0 인덱스)에서 시작하여 함수가 true로 돌아올 때까지 각 요소를 반복하고 제거합니다.
그런 다음 조건이 충족되면 나머지 배열을 반환합니다. 그렇지 않으면 arr을 빈 배열로 반환해야 합니다.

 

예시

dropElements([1, 2, 3, 4], function(n) {return n >= 3;}) [3, 4]
dropElements([0, 1, 0, 1], function(n) {return n === 1;}) [1, 0, 1]
dropElements([1, 2, 3], function(n) {return n > 0;}) [1, 2, 3]
dropElements([1, 2, 3, 4], function(n) {return n > 5;}) []

 

여기서 주의해야 할 점은

function(n)을 만족하는 요소가 나오면 이 요소를 포함하여 나머지(아직 검사 안 한 요소들)를 다 반환한다.

설명보다 예시를 보면 더욱 이해가 빠를 것이다.

 

나의 풀이

function dropElements(arr, func) {
  let len = arr.length;
  for(let i = 0; i < len; i++){
    
    if(func(arr[0]) === true) {
      console.log(arr[0])
      break;
    }
    else arr.shift();
  }
  return arr;
}

 

 

처음에는 len을 선언하지 않고 arr.length까지 반복문을 선언했다.

for(let i = 0; i < arr.length; i++)

 

하지만 이렇게 할 경우 예시 4번에서 오류가 났고, len을 선언하였다.

오류가 발생하는 이유는 이와 같다.

In this case with each iteration you are shortening the arr.length with shift() so in some conditions it wont go through all the elements of arr till the func fails. That is way in this case you have to store the value of the arr.length to an other variable.
출처: https://forum.freecodecamp.org/t/freecodecamp-challenge-guide-drop-it/16010/4

 

즉, 각 반복에서 shift를 사용하여 arr의 길이를 줄이므로

어떤 조건에서는 연산이 실패할 때까지 모든 요소를 통과하지 못한다는 것이다.

그래서 변수를 선언하여 arr의 길이를 넣어주어야 한다.

 

Intermediate Algorithm Scripting: Drop itPassed

(문제 출처:www.freecodecamp.org)

320x100