inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

5. 최대 매출(Sliding Window)

코드 리뷰 부탁드립니다 :)

486

작성자 없음

작성한 질문수 0

0

안녕하세요 선생님 😀

강의 잘 보고 있습니다.

저는 count 변수를 두고 값을 저장하고 i값을 변경하여 사용하였는데 이렇게 작성해도 되는지 궁금하여 질문을 올리게 되었습니다. 또 아래와 같이 for문 안에 있는 i 값을 변경해도 괜찮은지도 궁금합니다!

 

function solution(k: number, arr: number[]): number {
  let sum: number = 0;
  let count: number = 0;
  let max: number = 0;

  for (let i = 0; i < arr.length; i++) {
    if (count < k) {
      sum += arr[i];
      count++;
    } else {
      if (max < sum) {
        max = sum;
      }
      i = i - count;
      count = 0;
      sum = 0;
    }
  }
  return max;
}

감사합니다

javascript 코딩-테스트 typescript

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
연이님, 코드 공유해주셔서 감사합니다.

변수 count를 사용해서 일정 횟수만큼 연산을 수행하고, 이를 통해 for 반복문 안에서 i의 값을 조정하는 방식으로 구현하신 것 같네요. 일반적으로 for 문의 증감식(i++)에서 조정하는 것은 피하는 게 좋습니다. 그 이유는 for 문의 반복 로직을 이해하기 어렵게 만들고, 루프의 흐름을 예측하기 어렵게 하기 때문입니다.

하지만 특정한 상황에서는 i 값을 조정해야 할 수도 있으며, 이는 실제로 유효한 프로그래밍 기법 중 하나입니다. 그러나 이럴 때는 로직이 명확하게 이해될 수 있도록 코드를 작성하는 것이 중요하며, 가능하면 더 나은 대안을 찾아보는 것이 좋습니다.

본 코드의 경우, sum을 구하는 부분을 개선할 필요가 있어 보입니다. 예를 들어, ‘슬라이딩 윈도우’ 알고리즘을 사용하면 i 값을 직접 조정하지 않고도 문제를 해결할 수 있습니다. 현재 구현하신 로직으로는 arr 배열을 여러 번 반복하게 되므로, 효율성 측면에서 개선의 여지가 있습니다.

for 문을 한 번만 사용하고, 완성된 window의 첫 번째 값을 빼고 다음 값을 더하는 방식으로 최대합을 구하는 슬라이딩 윈도우 알고리즘을 적용해 보세요. 이렇게 하면 배열을 한 번만 순회하면서 문제를 해결할 수 있습니다.

슬라이딩 윈도우 알고리즘에 대한 참고 코드는 아래와 같습니다:

function solution(k: number, arr: number[]): number {
  let sum: number = 0;
  let max: number = 0;
  
  // 처음 k개의 요소의 합을 구함
  for (let i = 0; i < k; i++) {
    sum += arr[i];
  }
  max = sum;

  // 슬라이딩 윈도우로 나머지 요소들 확인
  for (let i = k; i < arr.length; i++) {
    sum += arr[i] - arr[i - k];
    max = Math.max(max, sum);
  }

  return max;
}

위와 같이 코드를 작성하면, 복잡도는 O(n)으로 i 값을 조정하지 않고 문제를 해결할 수 있습니다.

코드 개선에 도움이 되셨길 바라며, 추가로 궁금한 점이 있으시면 언제든지 질문해주세요.

continue를 사용하는 이유

0

79

2

정렬 가능 여부 판단하기

0

64

2

알고리즘 학습법 관련해서 질문드립니다.

0

86

1

코드 리뷰 부탁드립니다!

0

90

1

indexOf를 사용해서 풀어보았습니다 !!

0

68

1

저는 이런식으로 구현 해보았습니다 !!

0

64

1

12,13,14 강의 소리만 나오고 검은 화면입니다

0

100

3

반복문 최소화하고 indexOf 사용해서 풀어봤습니다

0

63

1

영상 보기 전에 직접 풀어봤습니다.

0

74

1

섹션1의 17번문제 이 풀이로 풀어도 될까요?

0

135

2

정규표현식으로 처리해도 상관없나요 ?

0

120

2

3칸씩 건너뛸 수 있을 경우

0

125

2

강의에 대해 질문있습니다.

0

135

2

Object와 Set을 이용해 풀어봤습니다.

0

117

2

이렇게 해도 되나요?

0

102

2

선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.

0

145

2

이렇게 풀어도 괜찮을까요?

0

138

1

이렇게 풀어도 괜찮을까요?

0

112

1

모든 아나그램 찾기에서 시간복잡도

0

98

1

코드리뷰 부탁드립니다.

0

130

1

for loop 탈출은 return 문으로 해도 되지 않나요?

0

133

1

투포인트알고리즘으로 풀어봤습니다.

0

142

0

코드 리뷰 부탁드립니다.

0

120

1

코드 맞게 작성한 거 아닌가여??

0

146

1