배열 Assignment(반복문 활용)

DevOps 블로그·2021년 12월 2일
0
post-custom-banner

[Assignment]
divideArrayInHalf 함수를 다음과 같이 구현해주세요.
divideArrayInHalf 함수는 array를 인자로 받습니다. 이 array는 숫자 값으로 만 구성되어 있으며 총 5개의 요소(element)들로 구성되어 있습니다.
divideArrayInHalf 함수는 인자로 들어온 array 로 부터 새롭게 구성된 배열 result 을 리턴합니다.
array 요소들 중 10과 같거나 작은 값의 요소들은 result의 맨 앞으로, 10보다 큰 값의 요소들은 result의 맨 뒤로 재구성된 배열을 리턴 해주세요.
재구성이 되는 순서는 array의 맨 뒤 요소부터 맨 앞 요소까지 입니다. 즉, 배열의 뒷 요소 부터 재구성을 진행해주세요.
예를 들어, 인자로 들어오는 array가 다음과 같을 때,[1, 20, 10, 5, 100][1, 20, 10, 5, 100]
result 배열이 만들어 지는 순서는 다음과 같습니다.[100][5, 100]
[10, 5, 100][10, 5, 100, 20]
[1, 10, 5, 100, 20]
따라서 아래와 같은 result가 리턴 되어야 합니다.
[1, 10, 5, 100, 20]

이번에 문제를 풀면서 차근차근 수도코드를 작성하면서 풀었다.
그런데 풀고 나니 오류도 안뜨고 오답이라도 결과도 안나와서 당황스러웠으나, 준영님의 도움으로 오타를 찾아냈다. 그래서 결과는 나왔지만 문제가 원하는 결과값이 아니었다. 내가 놓친 부분은 바로 배열의 뒷요소 부터 재구성을 진행을 해야하는데, 나는 앞에서부터 차례대로 진행하는 식을 그대로 썼던 것이다.

for(i=0; i < array.length; i++)

그래서 생각한 것이 아래와 같은 코드였다.

for(i=array.length -1; i === 0; i--)

이렇게 하니 결과값이 [] 빈배열만 나왔다.
당연한 결과였다. 반복문의 형태를 제대로 이해한 것이 아니라 그냥 예시들만 보고 찾아 쓰다보니 생긴 참사였다.

for ([initialization]; [condition]; [final-expression])
statement

  • condition
    매 반복마다 평가할 식. 평가 결과가 참이라면 statement를 실행합니다. 이 식을 넣지 않았을 때 계산 결과는 언제나 참이 됩니다. 계산 결과가 거짓이라면 for 문의 바로 다음 식으로 건너 뜁니다.
    -mdn
  • 구조
    for(변수 초기화(시작점); 조건식(도착점 및 반복 횟수); 증감식(보폭)) {
    조건식이 true일 때 실행되는 구현부
    }

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for

i === 0;으로 평가하게 되면 값이 거짓이 되니 처음부터 다음 식으로 건너가게 되기 때문이다.
이것을 올바르게 고치려면 i가 유효한 배열 인덱스값(0이상의 정수들)인지를 판단하는 식을 적어야 했다.

(let i = array.length -1; i >= 0; i--)

그래서 최종 코드를 작성하고 테스트 했을 때 통과를 하였다.

// Assignment - 다음 함수 안에 코드를 구현하세요
function divideArrayInHalf(array) {
    let result = [];
    // console.log(array[array.length-1])
    //우선 배열 인자의 모든 값들을 확인하는 반복문을 만들어야 한다.
    
    for(let i = array.length -1; i >= 0; i--){
          //그리고 각각의 배열을 조건문으로 10이하인지 아닌지를 구분해야 한다.
      if(array[i] <= 10) {
        //10이하인 경우에는 맨 앞으로 보낸다.
        result.unshift(array[i]);
      } else {
        //그 밖의 경우 맨 뒤로 보낸다.
        result.push(array[i]);
      }
    }
  return result;  

}

console.log(divideArrayInHalf([1, 10, 5, 100, 20]));

// 아래의 코드는 절대로 수정하거나 삭제하지 마세요.
module.exports = {divideArrayInHalf};

profile
IT 엔지니어를 향해 살아가는, 공부하는 기록들을 모아두고 있습니다.
post-custom-banner

0개의 댓글