글 작성자: 개발자 올라프

Assignment

 

1. divideArrayInHalf 함수는 array를 인자로 받는다. 이 array는 숫자 값으로만 구성되어 있으며 총 5개의 element로 구성되어 있다.

 

2. divideArrayInHalf 함수는 인자로 들어온 array로 부터 새롭게 구성된 배열 result을 return한다.

 

3. array 요소들 중 10과 같거나 작은 값의 요소들은 result의 맨 앞으로, 10보다 큰 값의 요소들은 result의 맨 뒤로 재구성된 배열을 return한다.

 

4. 재구성이 되는 순서는 array의 맨 뒤 요소부터 맨 앞 요소까지 이다. 즉, 배열의 뒷 요소부터 재구성을 진행한다.

 

5. 예를 들어 인자로 들어오는 array가 다음과 같을때 [1, 20, 10, 5, 100], result 배열이 만들어지는 순서는 다음과 같다.

 

 


 

My code

 

function divideArrayInHalf(arr) {
	result = [];
    
    for(let i=0; i<arr.length; i++) {
    	let lastNumber = arr.pop();
        if(lastNumber <= 10) {
        	result.unshift(lastNumber);
        } else {
        	result.push(lastNumber);
        }
    }
    return result;
}

// 결과 : [10, 5, 100]

 

 

에러 수정

 

단순하게 for 조건식에 i<array.length를 넣으면 0부터 4까지 총 5회 반복할줄 알았다. array가 for문 안에서 pop() 메서드를 통해서 마지막 요소를 제거한 요소를 반환하는 과정에서 length가 3이 되었기에 3회만 반복됐다. 따라서 5회 반복할 수 있도록 array의 길이를 담은 변수를 선언하여 사용하기로 했다.

 

function divideArrayInHalf(arr) {
	result = [];
    const arrLength = arr.length; // array의 길이 5를 담은 변수 추가
    
    for(let i=0; i<arrLength; i++) {
    	let lastNumber = array.pop();
        if(lastNumber <= 10) {
        	result.unshift(lastNumber);
        } else {
        	result.push(lastNumber);
        }
    }
    return result;
}

// 결과 : [1, 10, 5, 100, 20]

 


 

다른방식

 

pop()메서드를 사용하지 않고 길이를 이용한 방식

function divideArrayInHalf(arr) {
	result = [];
    
    for(let i=array.length-1; i>=0; i--) {
    	if(array[i] <= 10) {
        	result.unshift(array[i]);
        } else {
        	result.push(array[i]);
        }
    }
    return result;
}