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

Algorithm

[Algorithm] ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ

๐Ÿ“‹ ๋ฌธ์ œ

ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ์—์„œ ์ผ์„ ํ•˜๋Š” ์ƒ์ˆ˜๋Š” ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ๊ป˜ ์ผ์„ ํ•˜๋Š” ๋‹ค๋ฅธ ์ง์›๋“ค์ด ํ–„๋ฒ„๊ฑฐ์— ๋“ค์–ด๊ฐˆ ์žฌ๋ฃŒ๋ฅผ ์กฐ๋ฆฌํ•ด ์ฃผ๋ฉด ์กฐ๋ฆฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ƒ์ˆ˜์˜ ์•ž์— ์•„๋ž˜์„œ๋ถ€ํ„ฐ ์œ„๋กœ ์Œ“์ด๊ฒŒ ๋˜๊ณ , ์ƒ์ˆ˜๋Š” ์ˆœ์„œ์— ๋งž๊ฒŒ ์Œ“์—ฌ์„œ ์™„์„ฑ๋œ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋”ฐ๋กœ ์˜ฎ๊ฒจ ํฌ์žฅ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜๊ฐ€ ์ผํ•˜๋Š” ๊ฐ€๊ฒŒ๋Š” ์ •ํ•ด์ง„ ์ˆœ์„œ(์•„๋ž˜์„œ๋ถ€ํ„ฐ, ๋นต – ์•ผ์ฑ„ – ๊ณ ๊ธฐ - ๋นต)๋กœ ์Œ“์ธ ํ–„๋ฒ„๊ฑฐ๋งŒ ํฌ์žฅ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜๋Š” ์†์ด ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•˜๋Š” ๋™์•ˆ ์† ์žฌ๋ฃŒ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์ผ์€ ์—†์œผ๋ฉฐ, ์žฌ๋ฃŒ์˜ ๋†’์ด๋Š” ๋ฌด์‹œํ•˜์—ฌ ์žฌ๋ฃŒ๊ฐ€ ๋†’์ด ์Œ“์—ฌ์„œ ์ผ์ด ํž˜๋“ค์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ์ˆ˜์˜ ์•ž์— ์Œ“์ด๋Š” ์žฌ๋ฃŒ์˜ ์ˆœ์„œ๊ฐ€ [์•ผ์ฑ„, ๋นต, ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ, ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ, ๋นต]์ผ ๋•Œ, ์ƒ์ˆ˜๋Š” ์—ฌ์„ฏ ๋ฒˆ์งธ ์žฌ๋ฃŒ๊ฐ€ ์Œ“์˜€์„ ๋•Œ, ์„ธ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ถ€ํ„ฐ ์—ฌ์„ฏ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๊ณ , ์•„ํ™‰ ๋ฒˆ์งธ ์žฌ๋ฃŒ๊ฐ€ ์Œ“์˜€์„ ๋•Œ, ๋‘ ๋ฒˆ์งธ ์žฌ๋ฃŒ์™€ ์ผ๊ณฑ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ถ€ํ„ฐ ์•„ํ™‰ ๋ฒˆ์งธ ์žฌ๋ฃŒ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, 2๊ฐœ์˜ ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ƒ์ˆ˜์—๊ฒŒ ์ „ํ•ด์ง€๋Š” ์žฌ๋ฃŒ์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด ingredient๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ƒ์ˆ˜๊ฐ€ ํฌ์žฅํ•˜๋Š” ํ–„๋ฒ„๊ฑฐ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์‹œ์˜ค.

์ œํ•œ์‚ฌํ•ญ

  • 1 ≤ ingredient์˜ ๊ธธ์ด ≤ 1,000,000
  • ingredient์˜ ์›์†Œ๋Š” 1, 2, 3 ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’์ด๋ฉฐ, ์ˆœ์„œ๋Œ€๋กœ ๋นต, ์•ผ์ฑ„, ๊ณ ๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

[2, 1, 1, 2, 3, 1, 2, 3, 1] 2
[1, 3, 2, 1, 2, 1, 3, 1, 2] 0

 

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

์ฒ˜์Œ ์ƒ๊ฐํ•  ๋•Œ ๊ธฐ์กด์˜ ๋ฐฐ์—ด์„ ๊ณ„์† ๋ฐ˜๋ณตํ•ด์„œ 1-2-3-1 ํŒจํ„ด์„ ์ฐพ์œผ๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐพ๊ณ  ์ฐพ์€ ๊ฒฝ์šฐ ๊ทธ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์•ž์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์•ž์—์„œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํƒ์ƒ‰ํ•ด์•ผํ•˜๊ณ  ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์š”์†Œ๋ฅผ ์ง€์›Œ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์Šคํ…์„ ์ด์šฉํ–ˆ๋‹ค.

 

ํŒจํ‹ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ingredient ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ํ•˜๋‚˜์”ฉ stack์ด๋ผ๋Š” ๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค. ๋งŒ์•ฝ ์ด stack ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 4 ์ด์ƒ์ด๊ณ , ๋งจ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ 1(๋นต)์ธ ๊ฒฝ์šฐ ํ–„๋ฒ„๊ฑฐ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— stack์˜ 4๋ฒˆ์งธ ์š”์†Œ๊นŒ์ง€ ํ™•์ธํ•ด๋ณธ๋‹ค. ์ด๋•Œ ๊ฑฐ๊พธ๋กœ 1-3-2-1 ํŒจํ„ด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 4๋ฒˆ์˜ pop์„ ํ•˜๋ฉฐ ํŒจํ‹ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  answer๋ฅผ 1 ๋”ํ•ด์ฃผ๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์ฒ˜์Œ์— ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ while ๋ฌธ์œผ๋กœ ์ž‘์„ฑํ–ˆ์—ˆ๋Š”๋ฐ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ œ์ผ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ 1(๋นต)์ด์–ด์„œ ํ™•์ธ์„ ํ•ด ๋ณธ ๊ฒฝ์šฐ 4๋ฒˆ์˜ pop ์ดํ›„์— ๋‹ค์‹œ ํ–„๋ฒ„๊ฑฐ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— if๋ฌธ์œผ๋กœ ํ•œ๋ฒˆ๋งŒ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

 

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

function solution(ingredient) {
  var answer = 0;

  const stack = [];
  for (const i of ingredient) {
    stack.push(i);

    if (stack.length >= 4 && stack[stack.length - 1] === 1) {
      if (stack[stack.length - 2] === 3 && stack[stack.length - 3] === 2 && stack[stack.length - 4] === 1) {
        for (let k = 0; k < 4; k++) stack.pop();
        answer += 1;
      }
    }
  }

  return answer;
}