❗ -> ❓❓❓ 연속 부분수열 1

frenchkebab·2021년 8월 22일
0
post-thumbnail

내 풀이) 그냥 Brute Force... O(N^2)

function solution(m, arr) {
  let answer = 0,
    lt = 0,
    sum = 0;
  for (let rt = 0; rt < arr.length; rt++) {
    sum += arr[rt];
    if (sum === m) answer++;
    while (sum >= m) {
      sum -= arr[lt++];
      if (sum === m) answer++;
    }
  }
  return answer;
}

그냥 일단은 풀고보자는 마인드로 냅다 Brute Force로 돌렸다


Solution 풀이) Two Pointers O(N)

function solution(m, arr) {
  let answer = 0,
    l = 0,
    sum = 0;
  for (let r = 0; r < arr.length; r++) {
    sum += arr[r];
    if (sum === m) answer++;
    while (sum >= m) {
      sum -= arr[l++];
      if (sum === m) answer++;
    }
  }
  return answer;
}

굳이 while문 안밖으로 if (sum === m) answer ++ ; 코드를 왜 중첩해 놓았는지 모르겠다
아래와 같이 해도 같지 않을까?


왜 이렇게 하지 않았을까?

function solution(m, arr) {
  let answer = 0,
    l = 0,
    sum = 0;
  for (let r = 0; r < arr.length; r++) {
    sum += arr[r];
    while (sum >= m) {
      if (sum === m) answer++;
      sum -= arr[l++];
    }
  }
  return answer;
}

      let a = [1, 1, 1, 1, 1, 1];
      console.log(solution(3, a));

똑같이 돌아가는 것 같은데 조금 더 생각해 보아야 겠다.


배운 점

  • 일단은 Brute Force로라도 답을 도출해내서 기쁘다
  • Solution의 풀이는 시간을 더 가졌더라고 해도 떠올리기는 힘들었을 것 같다.
    (빠르게 해설을 보고 아이디어를 배워나가는 것이 좋은 것 같다.)
profile
Blockchain Dev Journey

0개의 댓글