ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ด์ฝ”ํ…Œ Ch13-18] ๊ด„ํ˜ธ ๋ณ€ํ™˜ (์žฌ๊ท€)

์€์ง„ 2022. 3. 22. 20:03

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๋ฌธ์ œ์„ค๋ช…

[์ด์ฝ”ํ…Œ Ch13-18] ๊ด„ํ˜ธ ๋ณ€ํ™˜ (์žฌ๊ท€)
์ด์ฝ”ํ…Œ

โœ๏ธIdea Sketch

๋ฌธ์ œ ์š”์•ฝ

๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด : '(' ์™€ ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์žˆ์„ ๊ฒฝ์šฐ, '(' ์˜ ๊ฐœ์ˆ˜์™€ ')' ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ
์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด : ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์—์„œ '('์™€ ')'์˜ ๊ด„ํ˜ธ์˜ ์ง๋„ ๋ชจ๋‘ ๋งž๋Š” ๊ฒฝ์šฐ

๋ชฉํ‘œ : ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ


  1. ์ž…๋ ฅ์ด ๋นˆ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ, ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฌธ์ž์—ด w๋ฅผ ๋‘ "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" u, v๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, u๋Š” "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"๋กœ ๋” ์ด์ƒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•˜๋ฉฐ, v๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ฌธ์ž์—ด u๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" ์ด๋ผ๋ฉด ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    3-1. ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ u์— ์ด์–ด ๋ถ™์ธ ํ›„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฌธ์ž์—ด u๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"์ด ์•„๋‹ˆ๋ผ๋ฉด ์•„๋ž˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    4-1. ๋นˆ ๋ฌธ์ž์—ด์— ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋กœ '('๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
    4-2. ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ž…๋‹ˆ๋‹ค.
    4-3. ')'๋ฅผ ๋‹ค์‹œ ๋ถ™์ž…๋‹ˆ๋‹ค.
    4-4. u์˜ ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์˜ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์–ด์„œ ๋’ค์— ๋ถ™์ž…๋‹ˆ๋‹ค.
    4-5. ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


์‹œ๊ฐ„๋ณต์žก๋„

O(n)


์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์žฌ๊ท€ ํ•จ์ˆ˜ ๊ตฌํ˜„

์žฌ๊ท€ ํ•จ์ˆ˜ ๊ตฌํ˜„์„ ์š”๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์žฌ๊ท€ ํ•จ์ˆ˜ ๊ตฌํ˜„์€ DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ต์žฌ์—์„œ DFS/BFS ํŒŒํŠธ๋กœ ๋ถ„๋ฅ˜๋˜์—ˆ๋‹ค.


โœ๏ธ๋‚ด ์†Œ์Šค์ฝ”๋“œ

#1 : ์ž…๋ ฅ์ด ๋นˆ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ, ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

#for๋ฌธ : ๋ฌธ์ž์—ด w๋ฅผ ๋‘ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด u, v๋กœ ๋ถ„๋ฆฌํ•ด์•ผํ•œ๋‹ค. ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ์ค€์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค. ์—ด๋ฆฐ ๊ด„ํ˜ธ์™€ ๋‹ซํžŒ ๊ด„ํ˜ธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋˜‘๊ฐ™์•„์ง€๋Š” idx๋ฅผ ๊ตฌํ•˜๋ฉด ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด w๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

#2 : idx๋ฅผ ๊ธฐ์ค€์œผ๋กœ, ๋ฌธ์ž์—ด w๋ฅผ ๋‘ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด u, v๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.

#3 : ๋ฌธ์ž์—ด u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฉด, ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๋ฌธ์ž์—ด u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ธ์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค. ๋ฌธ์ž์—ด u๋Š” ํ•ญ์ƒ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค 0์˜ ๊ฐ’์ด ์—ด๋ฆฐ ๊ด„ํ˜ธ (๋ฉด, ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋‹ค.

return u + recursion(v)

#4 : ๋ฌธ์ž์—ด u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉด, ๋‹ค์Œ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • (๋ฅผ ๋ถ™์ธ๋‹ค + ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค + )๋ฅผ ๋ถ™์ธ๋‹ค + temp๋ฅผ ๋ถ™์ธ๋‹ค
  • temp : string slice u[1:-1]๋กœ ์ฒซ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , for๋ฌธ์œผ๋กœ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘๋Š”๋‹ค.
return '(' + recursion(v) + ')' + temp


์ „์ฒด ์ฝ”๋“œ

  def solution(p):
      return recursion(p)

  def recursion(w):
      if w == '':  # 1
          return ''

      cnt_open = 0
      cnt_close = 0
      idx = len(w)

      for i in range(len(w)):
          if cnt_open == cnt_close > 0:
              idx = i 
              break
          if w[i] == '(':
              cnt_open += 1
          elif w[i] == ')':
              cnt_close += 1

      u = w[:idx]  # 2
      v = w[idx:]

      if w[0] == '(': # 3
          return u + recursion(v)

      else: # 4
          temp = ''

          for x in u[1:-1]:
              if x == ')':
                  temp += '('
              else:
                  temp += ')'

          return '(' + recursion(v) + ')' + temp