JavaScript 기본 프로그래밍 연습

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩에서는 기본적인 기술을 구축하는 데 도움이 되도록 설계된 일련의 연습을 통해 JavaScript 프로그래밍을 탐구할 것입니다. 기본 구문 및 데이터 유형부터 비동기 프로그래밍 및 함수형 프로그래밍과 같은 더 고급 개념까지, 이 랩은 숙련된 JavaScript 개발자가 되는 데 도움이 되는 실질적인 경험을 제공할 것입니다. 프로그래밍을 처음 접하거나 기술을 확장하려는 경우, 이 랩은 성공하는 데 필요한 도구를 제공합니다.

최대 부분 배열 알고리즘

코딩 연습을 위해 터미널/SSH 를 열고 node를 입력하세요. 이 알고리즘은 숫자 배열 내에서 가장 큰 합을 가진 연속적인 부분 배열을 찾습니다. 이 알고리즘을 구현하려면 다음 단계를 따르세요.

  • 탐욕적 접근 방식 (greedy approach) 을 사용하여 현재 sum과 현재 최대값인 maxSum을 추적합니다. 모든 값이 음수인 경우 가장 높은 음수 값을 반환하도록 maxSum-Infinity로 설정합니다.
  • 최대 시작 인덱스 sMax, 최대 종료 인덱스 eMax 및 현재 시작 인덱스 s를 추적하기 위한 변수를 정의합니다.
  • Array.prototype.forEach()를 사용하여 값을 반복하고 현재 값을 sum에 더합니다.
  • 현재 summaxSum보다 크면 인덱스 값과 maxSum을 업데이트합니다.
  • sum0 미만이면 0으로 재설정하고 s의 값을 다음 인덱스로 업데이트합니다.
  • Array.prototype.slice()를 사용하여 인덱스 변수로 표시된 부분 배열을 반환합니다.

다음은 알고리즘에 대한 JavaScript 코드입니다.

const maxSubarray = (...arr) => {
  let maxSum = -Infinity,
    sum = 0;
  let sMax = 0,
    eMax = arr.length - 1,
    s = 0;

  arr.forEach((n, i) => {
    sum += n;
    if (maxSum < sum) {
      maxSum = sum;
      sMax = s;
      eMax = i;
    }

    if (sum < 0) {
      sum = 0;
      s = i + 1;
    }
  });

  return arr.slice(sMax, eMax + 1);
};

다음은 함수 사용 예시입니다.

maxSubarray(-2, 1, -3, 4, -1, 2, 1, -5, 4); // [4, -1, 2, 1]

요약

축하합니다! 최대 부분 배열 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.