๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐˜ผ๐™ก๐™œ๐™ค๐™ง๐™ž๐™ฉ๐™๐™ข/๐™‹๐™ง๐™ค๐™œ๐™ง๐™–๐™ข๐™ข๐™š๐™ง๐™จ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค '์›”๊ฐ„ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ ์‹œ์ฆŒ2 ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ' ํŒŒ์ด์ฌ ํ’€์ด

by beomcoder 2023. 5. 8.
728x90
๋ฐ˜์‘ํ˜•
https://school.programmers.co.kr/learn/courses/30/lessons/76502
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

"""
๋‹ค์Œ ๊ทœ์น™์„ ์ง€ํ‚ค๋Š” ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

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

def solution(s):
    ans, pair = 0, {'{':'}', '[':']', '(':')'}
    for i in range(len(s)):
        iscorrect, stack = True, []
        for v in s:
            if v in ['{','[','(']: stack.append(v)
            elif not stack or v != pair[stack[-1]]: iscorrect = False
            else: stack = stack[:-1]
        
        ans += int(iscorrect and not stack)
        s = s[1:]+s[0]
        
    return ans

"""
์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์˜ ๊ธฐ์ค€์„ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค.
1. ์—ด๋ฆฐ ๊ธฐํ˜ธ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „์— ๋‹ซํžŒ ๊ธฐํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด ์•ˆ๋œ๋‹ค.
2. ๋‹ซํžŒ ๊ธฐํ˜ธ๊ฐ€ ๋‚˜์˜ฌ๋•Œ ์ง์ด ๋งž์•„์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ stack์œผ๋กœ ์ƒ๊ฐํ•ด์„œ ํ’€์—ˆ๋‹ค.
๋จผ์ € ๋‹ต์„ ์ €์žฅํ•  ์ธํŠธ ans, ์„œ๋กœ์˜ ์ง์„ ๋งž์ถ˜ ๋”•์…”๋„ˆ๋ฆฌ pair๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ž์—ด์„ ํ•œ๋ฐ”ํ€ด ๋Œ๋ฆฌ๋ฉด์„œ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ธ์ง€ ์ฒดํฌํ•ด์•ผํ•˜๋ฏ€๋กœ
for๋ฌธ์œผ๋กœ s์˜ ๊ธธ์ด๋งŒํผ ๋Œ๋ ค์ฃผ์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ธ์ง€ ํŒ๋‹จํ•˜๋Š” iscorrect๋ณ€์ˆ˜, stack์„ ์„ ์–ธํ•˜์˜€๋‹ค.
๋ฌธ์ž์—ด s๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์˜ค๊ธฐ ์œ„ํ•ด for๋ฌธ์„ ๋Œ๋ ค์ฃผ์—ˆ๊ณ ,
์œ„์— ์ ์–ด๋†“์€ 1, 2๋ฒˆ์„ ์ฒดํฌํ–ˆ๋‹ค.

(if) ๋จผ์ € ์—ด๋ฆฐ๊ธฐํ˜ธ๊ฐ€ ๋‚˜์˜ฌ๊ฒฝ์šฐ stack์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
(elif) ๋‹ซํžŒ๊ธฐํ˜ธ๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด 1๋ฒˆ๊ฒฝ์šฐ ๋˜๋Š” 2๋ฒˆ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด False
(else) 1, 2๋ฒˆ์ด ์ถฉ์กฑํ•˜๋ฉด stack์—์„œ ์—ด๋ฆฐ๊ธฐํ˜ธ ํ•˜๋‚˜๋ฅผ ์ง€์›Œ์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ž์—ด์„ ๋‹ค ๊ฒ€์‚ฌํ•˜์˜€์œผ๋ฉด ans์— 1์„ ์ถ”๊ฐ€์‹œ์ผœ์ค€๋‹ค.
์ด๋•Œ ์•„์ง stack์— ์—ด๋ฆฐ๊ธฐํ˜ธ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค๋ฉด ํ‹€๋ฆฐ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ์ด๊ฒฝ์šฐ๋Š” 0์„ ๋”ํ•ด์ค€๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ s์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋กœ ์˜ฎ๊ฒจ์„œ ํ•œ์นธ ๋Œ๋ ค์ค€๋‹ค.
"""
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€