Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[JavaScript/section 6] 05 - ์‡ ๋ง‰๋Œ€๊ธฐ

_์„ฑํ˜ธ_ 2022. 9. 27. 11:32
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 05 - ์‡ ๋ง‰๋Œ€๊ธฐ(์Šคํƒ)

์‡ ๋ง‰๋Œ€๊ธฐ์™€ ๋ ˆ์ด์ €์˜ ๋ฐฐ์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ด„ํ˜ธ ํ‘œํ˜„์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ž˜๋ ค์ง„ ์‡ ๋ง‰๋Œ€๊ธฐ ์กฐ๊ฐ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์‡  ๋ง‰๋Œ€๊ธฐ๊ฐ€ ๋ ˆ์ด์ €๋ฅผ ๋งŒ๋‚ ๋•Œ๋งˆ๋‹ค ๋ช‡ ๊ฐœ์˜ ์กฐ๊ฐ์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ๊ฐ์ด ์ƒ๊ธธ๋•Œ๋งˆ๋‹ค ๋ฐ”๊ตฌ๋‹ˆ์— ๋„ฃ์–ด์ค€๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ๋งŽ์€ ๋„์›€์ด ๋œ๋‹ค.

ํ’€์ด ๋ฐฉ๋ฒ•

  • for ๋ฌธ์„ ๋Œ๋ฉด์„œ '('๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ฌด์กฐ๊ฑด ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.
  • ')'๋ฅผ ๋งŒ๋‚˜๋ฉด pop() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์Šคํƒ์—์„œ ์ž๋ฃŒ๋ฅผ ๊บผ๋‚ด๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ s[i - 1]์˜ ๊ฐ’์ด '('์ด๋ผ๋ฉด ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ์˜ ์ธ์ ‘ํ•œ ์Œ์œผ๋กœ ๋ ˆ์ด์ €์— ํ•ด๋‹นํ•œ๋‹ค. ์Šคํƒ์˜ ๊ธธ์ด๊ฐ€ ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๊ฐœ์ˆ˜์ด๋ฏ€๋กœ ์Šคํƒ์˜ ๊ธธ์ด๋ฅผ answer ๋ณ€์ˆ˜(๋ฐ”๊ตฌ๋‹ˆ)์— ๋ˆ„์ ์‹œํ‚จ๋‹ค.
  • s[i - 1]์˜ ๊ฐ’์ด ')'์ด๋ผ๋ฉด ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ์˜ค๋ฅธ์ชฝ ๋์„ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ answer++์„ ํ•ด์ค€๋‹ค. ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๋งˆ์ง€๋ง‰ ์กฐ๊ฐ์„ ๋ฐ”๊ตฌ๋‹ˆ์— ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

 

๐Ÿ“ ํ’€์ด

function solution(s) {
  let answer = 0;
  let stack = [];

  for (let i = 0; i < s.length; i++) {
    if (s[i] === '(') stack.push(s[i]);
    else {
      stack.pop();
      if (s[i - 1] === '(') {
        answer += stack.length;
      } else {
        answer++;
      }
    }
  }

  return answer;
}

let a = '(((()(()()))(())()))(()())';
console.log(solution(a));