๐Ÿšถโ€โ™‚๏ธRoad to ์ฝ”ํ…Œ(7) - ์Šคํƒ ํ™œ์šฉ

์•ˆํƒœํ˜„ยท2024๋…„ 12์›” 19์ผ

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
7/15

๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ BaaarkingDog๋‹˜์˜ ์‹ค์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

[์ถ”๊ฐ€] ์šฉ๊ฐํ•˜๊ฒŒ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[์ถ”๊ฐ€] ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ - ํŒŒ์ด์ฌ

[์ถ”๊ฐ€] ์ขŒ์ถฉ์šฐ๋Œ, ํŒŒ์ด์ฌ์œผ๋กœ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„ํ•˜๊ธฐ

์Šคํƒ์˜ ํ™œ์šฉ : ์ˆ˜์‹์˜ ๊ด„ํ˜ธ ์Œ

์ฃผ์–ด์ง„ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.
์ง์ด ๋‹ค ๋งž์œผ๋ฉด ๋งž๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€?

  • ๋ฐฉ๋ฒ•1 : ์ง ๋งž์ถ”๊ธฐํ•ด์„œ ์ง€์›Œ๋‚˜๊ฐ€๊ธฐ. ๋ฌผ๋ก , (())()()๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋งŒ ๋™์ž‘ํ•œ๋‹ค.
    ๊ด„ํ˜ธ๊ฐ€ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์ผ ๋•Œ๋Š” ๊ทธ ๋ฐฉ๋ฒ•์œผ๋กœ๋งŒ ํ•ด๊ฒฐ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. ({)}์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€.
  • ๋ฐฉ๋ฒ•2 : ๋ถ™์–ด์žˆ๋Š” ()๊ณผ {} ๋“ฑ์„ ์ง€์šฐ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
    ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„์‹œ O(n^2)์ด ๊ฑธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” O(n)์ด๋‹ค. ์Šคํƒ์„ ์ด์šฉ์‹œ ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด ์ง„๋‹ค.
    -> ๋ฌธ์ž์—ด์„ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฝ์–ด๋‚˜๊ฐˆ ๋•Œ, ๋‹ซ๋Š” ๊ด„ํ˜ธ๋Š” ๋‚จ์•„์žˆ๋Š” ๊ด„ํ˜ธ ์ค‘์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋“ค์–ด์˜จ ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ์ง์„ ์ง€์–ด ์—†์• ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ด๋„ ๋œ๋‹ค. ({(){}})์„ ์‚ดํŽด๋ณด์ž.

({(){}})์„ ์•ž์—์„œ ๋ถ€ํ„ฐ ์ฝ์–ด๋‚˜๊ฐ€๋ฉด ({( ์ดํ›„ )๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋“ค์–ด์˜จ ์—ฌ๋Š” ๊ด„ํ˜ธ๋ฅผ ์—†์• ์„œ ({๊ฐ€ ๋œ๋‹ค. ({{}๊ฐ€ ๋์„ ๋•Œ๋„ ๋‹ค์‹œ ({๊ฐ€ ๋œ๋‹ค. ์ดํ›„์— ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋‚˜๋จธ์ง€ ({๊ฐ€ ์—†์–ด์ง„๋‹ค.
์ •๋ฆฌํ•˜์ž๋ฉด,
1. ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด ์Šคํƒ์— ์ถ”๊ฐ€
2. ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด
2-1. ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ ์Œ
2-2. ์Šคํƒ์˜ top์ด ์ง์ด ๋งž์ง€ ์•Š์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Œ.
2-3. ์Šคํƒ์˜ top์ด ์ง์ด ๋งž๋Š” ๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ pop
3. ๋ชจ๋“  ๊ณผ์ •์„ ๋๋‚ธ ํ›„ ์Šคํƒ์— ๊ด„ํ˜ธ๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ ์Œ, ๋‚จ์•„์žˆ์ง€ ์•Š์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ์Œ.

์—ฐ์Šต๋ฌธ์ œ ๋ฐฑ์ค€ 4949๋ฒˆ ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ

import sys


while True:
  answer=True
  stack=[]
  sent=sys.stdin.readline().rstrip()
  if sent=='.':
    break
  for i in sent:
    if i=='(' or i=='[':
      stack.append(i)
      
    elif i==']':
      if len(stack) ==0:
        answer=False
        break
      else:
        gual=stack[-1]
      if len(stack) ==0 or gual != '[':
        answer=False
        break
      stack.pop()
      
      
    elif i==')':
      if len(stack) ==0:
        answer=False
        break
      else:
        gual=stack[-1]
      if len(stack) ==0 or gual != '(':
        answer=False
        break
      stack.pop()
  
  if len(stack) == 0  and answer:
    print('yes')
  else:
    print('no')
    
    

์ˆ˜ ๋งŽ์€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋šซ์–ด์•ผํ•œ๋‹ค๋Š”๊ฒƒ์ด ํž˜๋“ค์—ˆ๋‹ค.

profile
๊ณ ๊ฐ์—๊ฒŒ ์‹ ๋ขฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์•ˆํƒœํ˜„์ž…๋‹ˆ๋‹ค.

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