๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm] ์ฟ ํ‚ค ๊ตฌ์ž…

๐Ÿ“‹ ๋ฌธ์ œ

๊ณผ์ž๋ฅผ ๋ฐ”๊ตฌ๋‹ˆ ๋‹จ์œ„๋กœ ํŒŒ๋Š” ๊ฐ€๊ฒŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ€๊ฒŒ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ์ฐจ๋ก€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์€ ๋ฐ”๊ตฌ๋‹ˆ N๊ฐœ๊ฐ€ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•ด ๋†จ์Šต๋‹ˆ๋‹ค.

์ฒ ์ˆ˜๋Š” ๋‘ ์•„๋“ค์—๊ฒŒ ์ค„ ๊ณผ์ž๋ฅผ ์‚ฌ๋ คํ•ฉ๋‹ˆ๋‹ค. ์ฒซ์งธ ์•„๋“ค์—๊ฒŒ๋Š” l๋ฒˆ ๋ฐ”๊ตฌ๋‹ˆ๋ถ€ํ„ฐ m๋ฒˆ ๋ฐ”๊ตฌ๋‹ˆ๊นŒ์ง€, ๋‘˜์งธ ์•„๋“ค์—๊ฒŒ๋Š” m+1๋ฒˆ ๋ฐ”๊ตฌ๋‹ˆ๋ถ€ํ„ฐ r๋ฒˆ ๋ฐ”๊ตฌ๋‹ˆ๊นŒ์ง€๋ฅผ ์ฃผ๋ คํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋‘ ์•„๋“ค์ด ๋ฐ›์„ ๊ณผ์ž ์ˆ˜๋Š” ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค(1 <= l <= m, m+1 <= r <= N). ์ฆ‰, A[i] ๋ฅผ i๋ฒˆ ๋ฐ”๊ตฌ๋‹ˆ์— ๋“ค์–ด์žˆ๋Š” ๊ณผ์ž ์ˆ˜๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, A[l]+..+A[m] = A[m+1]+..+A[r] ๋ฅผ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋ฐ”๊ตฌ๋‹ˆ ์•ˆ์— ๋“ค์€ ๊ณผ์ž ์ˆ˜๊ฐ€ ์ฐจ๋ก€๋กœ ๋“ค์€ ๋ฐฐ์—ด cookie๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์กฐ๊ฑด์— ๋งž๊ฒŒ ๊ณผ์ž๋ฅผ ์‚ด ๊ฒฝ์šฐ ํ•œ ๋ช…์˜ ์•„๋“ค์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋งŽ์€ ๊ณผ์ž ์ˆ˜๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. (๋‹จ, ์กฐ๊ฑด์— ๋งž๊ฒŒ ๊ณผ์ž๋ฅผ ๊ตฌ๋งคํ•  ์ˆ˜ ์—†๋‹ค๋ฉด 0์„ return ํ•ฉ๋‹ˆ๋‹ค)

์ œํ•œ์‚ฌํ•ญ

  • cookie์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 2,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • cookie์˜ ๊ฐ๊ฐ์˜ ์›์†Œ๋Š” 1 ์ด์ƒ 500 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

[1,1,2,3] 3
[1,2,4,5] 0

 

โœ๏ธ ํ’€์ด

๋ฒ”์œ„๋ฅผ ๊ตฌํ•ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ์—๋Š” ๋ฌด์กฐ๊ฑด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ์ผ์–ด๋‚  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค. ๊ธฐ์ค€์ด ๋˜๋Š” ์ˆ˜๋ฅผ ์žก๊ณ  ์ขŒ์šฐ๋กœ ๋”ํ•ด๋‚˜๊ฐ€๋ฉฐ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ๋  ๋•Œ๋ฅผ ์ฐพ์•˜๋‹ค.

 

๊ธฐ๋ณธ์ ์ธ ์•„์ด๋””์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. [1, 1, 2, 3, 1, 1]์˜ ๊ฒฝ์šฐ๋ฅผ ์˜ˆ์‹œ๋กœ ์žก์•˜๋‹ค.

left์™€ right๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์ถ”๊ฐ€๋กœ ์ขŒ์šฐ ๋ˆ„์ ํ•ฉ์„ ๊ฐ€์ง€๋Š” leftSum, rightSum์ด๋ผ๋Š” ๋ณ€์ˆ˜๋„ ์„ ์–ธํ–ˆ๋‹ค.

๊ธฐ์ค€์ด ๋˜๋Š” ์ˆ˜๋Š” 0 ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ left = 0, right = 1์ด ๋œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ์ดˆ๊ธฐ๊ฐ’์ด left = 1, right = 2 / left = 2, right = 3 / left = 3, right = 4 ... ๋กœ ์ง„ํ–‰ํ•ด ๋‚˜๊ฐ„๋‹ค. 

๋งŒ์•ฝ ํ˜„์žฌ ์ดˆ๊ธฐ๊ฐ’์ด left = 2, right = 3 ์ผ ๋•Œ, leftSum, rightSum์€ ๊ฐ๊ฐ 2, 3์ด๋‹ค. ์ด๋•Œ ์ด ๋‘˜์„ ๋น„๊ตํ•ด์„œ ์ ์€ ๋ถ€๋ถ„์„ ํ™•์žฅ์‹œํ‚จ๋‹ค. ํ˜„์žฌ ์˜ˆ์‹œ์˜ ๊ฒฝ์šฐ 2, 3์œผ๋กœ ์™ผ์ชฝ ๋ถ€๋ถ„์ด ์ž‘๊ธฐ ๋•Œ๋ฌธ์— left ์ธ๋ฑ์Šค๋ฅผ -1 ์‹œ์ผœ์ค€๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ๊ฐ์†Œ ๋˜๋Š” ์ฆ๊ฐ€์‹œํ‚ฌ ๋•Œ ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. 

์ด์ œ ํ˜„์žฌ ์ธ๋ฑ์Šค๋Š” left = 1, right = 3๊ฐ€ ๋˜๊ณ  leftSum = 2 + 1, rightSum = 3์œผ๋กœ ๊ฐ™์ด ๊ฐ™๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋“ค์—๊ฒŒ 3๊ฐœ์”ฉ ๋‚˜๋ˆ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค์˜ ์ฆ๊ฐ์— ๋”ฐ๋ผ ๋” ํฐ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ง„ํ–‰ํ•œ๋‹ค. ์ด๋•Œ ์ขŒ์šฐ ํ•œ์ชฝ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š”๋ฐ ๋‚˜๋Š” left์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ์†Œ์‹œ์ผฐ๋‹ค. 

ํ˜„์žฌ ์ธ๋ฑ์Šค๋Š” left = 0, right = 3๊ฐ€ ๋˜๊ณ  leftSum = 2 + 1 + 1, rightSum = 3๋กœ ์˜ค๋ฅธ์ชฝ์ด ๋” ์ž‘๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋ฅธ์ชฝ right์˜ ์ธ๋ฑ์Šค๋ฅผ +1ํ•ด์ค€๋‹ค. 

ํ˜„์žฌ ์ธ๋ฑ์Šค๋Š” left = 0, right = 4๊ฐ€ ๋˜๊ณ  leftSum = 2 + 1 + 1, rightSum = 3 + 1๋กœ ์ƒˆ๋กœ์ด ๋” ํฐ ๊ฐ’์„ ์ฐพ์•˜๋‹ค. ๋”ฐ๋ผ์„œ answer๋ฅผ ๊ฐฑ์‹ ํ•ด์ฃผ๊ณ  ์™ผ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜ ๊ฐ์†Œ์‹œํ‚จ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋Ÿด ๊ฒฝ์šฐ -1๋กœ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฒ—์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— break๋ฅผ ํ•ด์ฃผ๊ณ  ๋‹ค์Œ์˜ ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. 

 

์œ„์™€ ๊ฐ™์€ ์‹์œผ๋กœ ๋ชจ๋“  ๊ฐ’์„ ์ฐพ๊ณ  ์ฐพ์„ ๋•Œ๋งˆ๋‹ค answer์™€ ๋น„๊ตํ•˜์—ฌ ์ตœ๋Œ€๊ฐ’์„ ๊ฐฑ์‹ ์‹œํ‚ค๋ฉด ์•„๋“ค์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ฟ ํ‚ค ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

โŒจ๏ธ ์ฝ”๋“œ

function solution(cookie) {
  var answer = 0;
  const cookieLen = cookie.length;

  for (let i = 0; i < cookieLen - 1; i++) {
    let left = i;
    let right = i + 1;
    let leftSum = cookie[left];
    let rightSum = cookie[right];

    while (true) {
      if (leftSum === rightSum) answer = Math.max(answer, leftSum);

      if (leftSum <= rightSum) {
        left--;
        if (left < 0) break;
        leftSum += cookie[left];
      } else {
        right++;
        if (right >= cookieLen) break;
        rightSum += cookie[right];
      }
    }
  }

  return answer;
}