반복문 조건 설정 주의점

김정준·2022년 5월 1일
0

JS

목록 보기
2/13

17. 배열 조작하기

Assignment

divideArrayInHalf 함수를 다음과 같이 구현해주세요.

  • divideArrayInHalf 함수는 array를 인자로 받습니다. 이 array는 숫자 값으로 만 구성되어 있으며 총 5개의 요소(element)들로 구성되어 있습니다.

  • divideArrayInHalf 함수는 인자로 들어온 array 로 부터 새롭게 구성된 배열 result 을 리턴합니다.

  • array 요소들 중 10과 같거나 작은 값의 요소들은 result의 맨 앞으로, 10보다 큰 값의 요소들은 result의 맨 뒤로 재구성된 배열을 리턴 해주세요.

  • 재구성이 되는 순서는 array의 맨 뒤 요소부터 맨 앞 요소까지 입니다. 즉, 배열의 뒷 요소 부터 재구성을 진행해주세요.

  • 예를 들어, 인자로 들어오는 array가 다음과 같을 때,

    [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]

풀이

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

    return result;
}

위 for문은 i < array.length 라는 조건이 있는데 이 조건은 반복문이 실행되면 array.pop()으로 인해 array.length가 1씩 감소해 반복문이 원하는 만큼 진행이 되지 않는다. 따라서 for문 위에 array.length를 변수에 대입시켜 array의 길이만큼의 값을 가지고 있는 변수를 조건으로 쓰면 이 문제를 해결할 수 있다.

let element = array.pop()

를 쓰는 것도 같은 이유에서다. elementarray.pop()으로 바꾸고 코드를 실행하면 array.pop()이 나올때마다 array.pop()이 실행된다. 그러니까 반복문의 조건에는 웬만하면 고정된 값을 넣는 습관을 들이자.

이 문제를 해결하면 아래와 같은 코드가 나온다.

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

    return result;
}

0개의 댓글