๐Ÿค– ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

#ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒŒ์ด์ฌ Lv.2 #๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ

seoyeun 2021. 12. 8. 19:20
๋ฌธ์ œ์„ค๋ช…
: ๋‹ค์Œ ๊ทœ์น™์„ ์ง€ํ‚ค๋Š” ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
- (), [], {} ๋Š” ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
๋งŒ์•ฝ A๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, (A), [A], {A} ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, [] ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ, ([]) ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
๋งŒ์•ฝ A, B๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, AB ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ
๋ฅผ ๋“ค์–ด, {} ์™€ ([]) ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ, {}([]) ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
๋Œ€๊ด„ํ˜ธ, ์ค‘๊ด„ํ˜ธ, ๊ทธ๋ฆฌ๊ณ  ์†Œ๊ด„ํ˜ธ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
์ด s๋ฅผ ์™ผ์ชฝ์œผ๋กœ x (0 ≤ x < (s์˜ ๊ธธ์ด)) ์นธ๋งŒํผ ํšŒ์ „์‹œ์ผฐ์„ ๋•Œ s๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ๋˜๊ฒŒ ํ•˜๋Š” x์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑ

 

๋ฌธ์ œํ’€์ด

: ํšŒ์ „ํ•œ ๋ฌธ์ž์—ด์„ right๋กœ ๋ณด๊ณ  ๋น„์–ด์žˆ๋Š” left ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ 

right์—์„œ ํ•˜๋‚˜์”ฉ ๋ฝ‘์•„์„œ left๋กœ ์˜ฎ๊ธธ๋•Œ 

1) ๋น„์–ด์žˆ์œผ๋ฉด ๊ทธ๋ƒฅ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค

2) ๋น„์–ด์žˆ์ง€์•Š๋‹ค๋ฉด left์˜ ๊ฐ’์ด ๋‹ซํžŒ๊ด„ํ˜ธ์ด๋ฉด break๋กœ ๋ฐ˜๋ณต๋ฌธํƒˆ์ถœ

3) ๋น„์–ด์žˆ์ง€์•Š๊ณ  left์˜ ๊ฐ’์ด ๋‹ซํžŒ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด right์˜ ๋งจ ์•ž ๋ฌธ์ž์—ด๊ณผ ์ง€์šธ์ˆ˜์žˆ๋Š”์ง€ dictionary๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜๊ณ  ์ง€์›Œ์ค€๋‹ค. 

4) ๋น„์–ด์žˆ์ง€์•Š๊ณ  left์˜ ๊ฐ’์ด ๋‹ซํžŒ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด right์˜ ๋งจ ์•ž ๋ฌธ์ž์—ด๊ณผ ์ง€์šธ์ˆ˜์—†๋‹ค๋ฉด left๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

์ตœ์ข…์ ์œผ๋กœ left์— ๋‚จ์•„์žˆ์ง€์•Š๋‹ค๋ฉด ๋‹ค ์ง€์šด๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— answer๋ฅผ 1์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

 

# solution

def solution(s):
    answer = 0
    dic = {'{':'}', '[':']', '(':')'}
           
    for i in range(len(s)):
        right = list(s[i:] + s[:i])
        left = []
        while right:
            temp = right.pop(0)
            if not left:
                left.append(temp)
            else:
                if left[-1] in ['}', ')', ']']:
                    break
                    
                if dic[left[-1]] == temp:
                    left.pop()
                else:
                    left.append(temp)
        
        if not left:
            answer += 1
            
    return answer