avatar
Published on

Codility - Brackets

Author
  • avatar
    Name
    yceffort

Brackets

๋ฌธ์ œ

๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์ง€๊ณ , S๋Š” ๋‹ค์Œ ๊ฒฝ์šฐ ์ผ ๋•Œ ์ฐธ์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

  • S๊ฐ€ ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ
  • (U) or [U] or {U} ์˜ ํ˜•ํƒœ๋กœ ๊ด„ํ˜ธ์•ˆ์— ๋ฌธ์ž์—ด์ด ์žˆ๋Š” ๊ฒฝ์šฐ
  • ๊ด„ํ˜ธ๊ฐ€ ์ง์ด ๋งž๊ฒŒ ๋‹ซํ˜€์žˆ๋Š” ๊ฒฝ์šฐ

์˜ˆ๋ฅผ ๋“ค์–ด

{[()()]}๋Š” ๊ด„ํ˜ธ๊ฐ€ ์•Œ๋งž๊ฒŒ ๋“ค์–ด์žˆ์ง€๋งŒ, ([)()]๋Š” ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๋‹ค. (์ง์€ ๋งž์ง€๋งŒ ์ž˜๋ชป๋‹ซํ˜€์žˆ์Œ)๊ด„ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ˜•์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ 1, ์•„๋‹ˆ๋ฉด 0์„ ๋ฆฌํ„ดํ•˜์ž.

ํ’€์ด

function solution(S) {
  const splited = S.split('')

  const stack = []

  for (let i of splited) {
    // ์—ฌ๋Š” ๊ฑฐ
    if (i === '{' || i === '[' || i === '(') {
      stack.push(i)
    } else {
      if (stack.size === 0) return 0

      // ๋‹ซ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ์— ์—ด์—ˆ๋˜ ๊ฒƒ์ด๋ž‘ ๋น„๊ต ํ•œ๋‹ค.
      const pop = stack.pop()

      if (i === ')') {
        if (pop !== '(') {
          return 0
        }
      }

      if (i === '}') {
        if (pop !== '{') {
          return 0
        }
      }

      if (i === ']') {
        if (pop !== '[') {
          return 0
        }
      }
    }
  }

  return stack.length === 0 ? 1 : 0
}

์—ฌ๋Š” ๊ด„ํ˜ธ๋ผ๋ฉด stack์— ๋„ฃ๊ณ , ๋‹ซ๋Š” ๊ด„ํ˜ธ๋ผ๋ฉด ์Šคํƒ์— ๋งจ์ง€๋ง‰ ๊ด„ํ˜ธ์™€ ๋น„๊ตํ•ด์„œ ์ ์ ˆํ•œ ๊ด„ํ˜ธ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

https://app.codility.com/demo/results/training9MREFG-CYW/