프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 비트마스크
  • 2023 인프콘 후기
  • 스파르타코딩클럽
  • 자바스크립트알고리즘
  • 코드스테이츠
  • MySQL
  • 알고리즘
  • 코딩프로젝트
  • vanilaJS
  • 모던자바스크립트딥다이브
  • 내일배움단
  • 자바스크립트
  • JavaScript
  • 자바스크립트비트마스크
  • nomadcoder
  • Til
  • 국비지원
  • nomadcoders
  • 내일배움카드
  • 투포인터알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이

[알고리즘] 최대매출

2022. 9. 9. 15:57

문제

현수의 아빠는 제과점을 운영합니다. 현수 아빠는 현수에게 N일 동안의 매출 기록을 주고 연속된 K일 동안의 최대 매출액이 얼마인지 구하라고 했습니다.

 

만약 N = 10이고 10일 간의 매출 기록이 아래와 같습니다. 이 때 k = 3 이면,

12 15 11 20 25 10 20 19 13 15

연속된 3일간의 최대 매출액은 11 + 20 + 25 = 56만원 입니다. 

여러분이 현수를 도와주세요.

풀이

1번 풀이

// 1번째 시도한 코드
// : lt와 rt를 선언해서, rt를 증가하면서 더하고,
// rt - lt 가 k - 1 보다 클 경우(index가 0부터 시작하므로 -1을 해줌)
// sum 에서 lt를 빼면서 증가
// sum에 rt를 더하고 max 값과 비교하여 max를 갱신하여 리턴

function solution1(arr, k) {
  let max = Number.MIN_SAFE_INTEGER;
  let lt = 0;
  let sum = 0;
  let N = arr.length;

  for (let rt = 0; rt < N; rt++) {
    sum += arr[rt];
    while (rt - lt > k - 1) {
      sum -= arr[lt++];
    }
    if (max < sum) max = sum;
  }

  return max;
}

const result1 = solution1(arr, k);
// console.log(result1);

2번 풀이

// 2번째 시도한 코드
// : i - k 를 해서 i 가 증가하는 만큼 이전에 더했던 값을 빼서 윈도우를 유지하는 방법.
// 처음부터 arr[i - k]를 하면 NaN이 되기 때문에, arr[i - k]가 존재하는지 확인한 후 빼주는 방법을 선택함.
function solution2(arr, k) {
  let max = Number.MIN_SAFE_INTEGER;
  let sum = 0;
  let N = arr.length;

  for (let i = 0; i < N; i++) {
    sum += arr[i];
    if (arr[i - k]) {
      sum -= arr[i - k];
    }

    if (max < sum) max = sum;
  }

  return max;
}

const result2 = solution2(arr, k);
// console.log(result2);

3번 풀이 : 강사님의 코드

function solution3(arr, k) {
  let max = 0;
  let sum = 0;

  // 0 부터 k 만큼 갯수를 가진 윈도우를 만들고, 그 합계를 max 에 일단 업데이트 한다.
  for (let i = 0; i < k; i++) sum += arr[i];
  max = sum;

  // k 부터 배열의 종료지점까지 i를 반복하면서, sum을 업데이트 한다. i가 증가하면 sum에 i 값을 더하는 동시에 윈도우 범위를 벗어나는 i - k 값을 빼는 것.
  // 그와 동시에 max 를 업데이트 하여 답을 도출한다.
  for (let i = k; i < arr.length; i++) {
    sum += arr[i] - arr[i - k];
    max = Math.max(max, sum);
  }

  return max;
}

const result3 = solution3(arr, k);
console.log(result3);

슬라이딩 윈도우 알고리즘이란 고정된 범위 (윈도우)를 가지고 움직이는 것으로, 범위를 유지하기 위해 현재 값을 더하면 가장 처음 더한 값은 빼주는 방식을 사용한다.

저작자표시 (새창열림)

'Algorithm & 자료구조 > (인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글

[알고리즘] 마구간 정하기  (2) 2022.10.11
[알고리즘] 모든 아나그램 찾기  (0) 2022.09.18
[알고리즘] 연속 부분수열 2 (투포인터 알고리즘)  (0) 2022.09.09
[알고리즘] 모든 아나그램 찾기(해쉬, 투포인터, 슬라이딩 윈도우)  (0) 2022.04.20
[알고리즘] 순열구하기  (0) 2022.03.19
    'Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
    • [알고리즘] 마구간 정하기
    • [알고리즘] 모든 아나그램 찾기
    • [알고리즘] 연속 부분수열 2 (투포인터 알고리즘)
    • [알고리즘] 모든 아나그램 찾기(해쉬, 투포인터, 슬라이딩 윈도우)
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바