Skip to content

Latest commit

ย 

History

History
92 lines (79 loc) ยท 2.49 KB

File metadata and controls

92 lines (79 loc) ยท 2.49 KB

Two Pointers Algorithm;ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฒ”์œ„๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์ง€๋งŒ, ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฒ”์œ„๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•œ๋‹ค.
  • ์ด์ค‘๋ฐ˜๋ณต๋ฌธ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^2) ์ด๋ฏ€๋กœ ๋ฐฐ์—ด ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์—ฐ์‚ฐ๋Ÿ‰์ด ์ œ๊ณฑ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐ˜๋ฉด,
    ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n) ์ด๋ฏ€๋กœ ๋” ํšจ์œจ์ ์ด๋‹ค.
  • ์š”์†Œ์˜ ํ•ฉ๊ณ„๋‚˜ ํ‰๊ท ์ด k ์ธ ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด์„ ๋ชจ๋‘ ์ฐพ์„ ๋•Œ

๋ฐฐ์—ด์˜ ์ฒ˜์Œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ

  1. ํ•„์š” ์‹œ ๋ฐฐ์—ด ์ •๋ ฌ
  2. ๋‘ ํฌ์ธํ„ฐ ๋ชจ๋‘ 0 ๋ฒˆ์งธ๋กœ ์ดˆ๊ธฐํ™”
  3. ๊ณ„์‚ฐํ•œ ๊ฐ’์ด k ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๋ ํฌ์ธํ„ฐ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
  4. ๊ณ„์‚ฐํ•œ ๊ฐ’์ด k ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์‹œ์ž‘ ํฌ์ธํ„ฐ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
// section5 3๋ฒˆ ๋ฌธ์ œ
const solution = (m, arr) => {
  let answer = 0,
    sum = 0;
  let lt = 0;

  for (let rt = 0; rt < arr.length; rt++) {
    // sum ์ด m ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
    // ๋ ํฌ์ธํ„ฐ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
    // ๊ทธ๋ฆฌ๊ณ  ๋ ํฌ์ธํ„ฐ ๊ฐ’์„ sum ์— ํ•ฉ์‚ฐ
    sum += arr[rt];
    if (sum === m) answer++;
    while (sum >= m) {
      // sum ์ด m ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด
      // ์‹œ์ž‘ ํฌ์ธํ„ฐ ๊ฐ’์„ sum ์—์„œ ๋บ€ ํ›„
      // ์‹œ์ž‘ ํฌ์ธํ„ฐ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
      sum -= arr[lt++];
      if (sum === m) answer++;
    }
  }
  return answer;
};

let a = [1, 2, 1, 3, 1, 1, 1, 2];
console.log(solution(6, a));
// 1 ~ n ์ค‘์—์„œ ํ•ฉ๊ณ„๊ฐ€ n ์ธ ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅ
// while ๋ฌธ ์‚ฌ์šฉ
const solution = (n) => {
  let answer = 0;
  let sum = 0;
  let lt = 1;
  let rt = 1;

  while (rt <= n) {
    sum += rt++;
    while (sum > n) {
      sum -= lt++;
    }
    if (sum === n) answer++;
  }
  return answer;
};

๋ฐฐ์—ด์˜ ์–‘ ๋์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ฐ€์šด๋ฐ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ

  1. ํ•„์š” ์‹œ ๋ฐฐ์—ด ์ •๋ ฌ
  2. ์‹œ์ž‘ ํฌ์ธํ„ฐ์™€ ๋ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ๊ฐ 0 ๊ณผ ๋ฐฐ์—ด ํฌ๊ธฐ - 1 ๋ฒˆ์งธ๋กœ ์ดˆ๊ธฐํ™”
  3. ๊ณ„์‚ฐํ•œ ๊ฐ’์ด k ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์‹œ์ž‘ ํฌ์ธํ„ฐ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
  4. ๊ณ„์‚ฐํ•œ ๊ฐ’์ด k ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๋ ํฌ์ธํ„ฐ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™
const solution = (m, arr) => {
  let answer = [];
  let p1 = 0;
  let p2 = arr.length - 1;

  arr.sort((a, b) => a - b);
  while (p1 < p2) {
    const sum = arr[p1] + arr[p2];
    if (sum < m) p1++;
    if (sum > m) p2--;
    else {
      answer.push([arr[p1], arr[p2]]);
      p1++;
      p2--;
    }
  }
  return answer;
};

let a = [1, 2, 5, 8, 3, 4, 6];
console.log(solution(6, a));