๐ŸŽฒ๋ฐฑ์ค€ 2504๋ฒˆ ๊ด„ํ˜ธ์˜ ๊ฐ’

Jeongeunยท2023๋…„ 5์›” 15์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
60/185

๋ฐฑ์ค€ 2504๋ฒˆ

๐Ÿ’Š '(', '[' ๊ด„ํ˜ธ๋งˆ๋‹ค์˜ ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋‘ ์“ฐ๊ณ , ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฒดํฌํ•ด์ค€ ์ฝ”๋“œ๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
๐Ÿ’Š ๋‹ค๋ฅธ ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๊ณ , reverse, point ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜์˜€๋‹ค.

์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฝ”๋“œ

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim().split('');

let stack = [];

for (let i = 0; i < input.length; i++) {
  if (input[i] === "]") {
    if (stack.length !== 0) {
      const top = stack[stack.length - 1];
      if (top === "[") {
        stack.pop();
        stack.push(3);
      } else if (top === "(") {
        console.log(0);
        return;
      } else {
        let sum = 0;
        while (true) {
          let top = stack.pop();
          if (top === "(") {
            console.log(0);
            return;
          } else if (top === "[") {
            stack.push(3 * sum);
            break;
          } else {
            sum += top;
          }
        }
      }
    } else {
      console.log(0);
      return;
    }
  } else if (input[i] === ")") {
    if (stack.length !== 0) {
      const top = stack[stack.length - 1];

      if (top === "(") {
        stack.pop();
        stack.push(2);
      } else if (top === "[") {
        console.log(0);
        return;
      } else {
        let sum = 0;
        while (true) {
          let top = stack.pop();
          if (top === "[") {
            console.log(0);
            return;
          } else if (top === "(") {
            stack.push(2 * sum);
            break;
          } else {
            sum += top;
          }
        }
      }
    } else {
      console.log(0);
      return;
    }
  } else {
    stack.push(input[i]);
  }
}

console.log(stack.reduce((a, b) => a + b, 0));

์ •๋‹ต ์ฝ”๋“œ

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim().split('');

let stack = [];

for (let i = 0; i < input.length; i++) {
  let top = stack[stack.length - 1];
  if (top === "[" && input[i] === "]") {
    stack.pop();
  } else if (top === "(" && input[i] === ")") {
    stack.pop();
  } else {
    stack.push(input[i]);
  }
}

if (stack.length !== 0) {
  console.log(0);
  return;
} else {
  stack = [];
}

for (let i = 0; i < input.length; i++) {
  const top = stack[stack.length - 1];
  const reverse = input[i] === ")" ? "(" : "[";
  const point = input[i] === ")" ? 2 : 3;
  if (input[i] === "]" || input[i] === ")") {
    if (top === reverse) {
      stack.pop();
      stack.push(point);
    } else {
      let sum = 0;
      while (true) {
        let top = stack.pop();
        if (top === reverse) {
          stack.push(point * sum);
          break;
        } else {
          sum += top;
        }
      }
    }
  } else {
    stack.push(input[i]);
  }
}

console.log(stack.reduce((a, b) => a + b, 0));

0๊ฐœ์˜ ๋Œ“๊ธ€