|
| 1 | +""" |
| 2 | +Problem : Valid Parentheses |
| 3 | +์ ํ : ์คํ |
| 4 | +๋ฌธ์ ํด์ |
| 5 | +* ๊ดํธ ๋ฌธ์์ด์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ง์ง์ด์ ธ ์๋์ง ํ๋จ |
| 6 | +* 3๊ฐ์ง ์ข
๋ฅ์ ๊ดํธ: (), {}, [] |
| 7 | +* ์ฌ๋ ๊ดํธ๋ ๊ฐ์ ์ข
๋ฅ์ ๋ซ๋ ๊ดํธ๋ก ๋ซํ์ผ ํจ |
| 8 | +* ๊ดํธ๋ ์ฌ๋ฐ๋ฅธ ์์๋ก ๋ซํ์ผ ํจ |
| 9 | +
|
| 10 | +ํด๊ฒฐ ์ ๋ต |
| 11 | +์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ค. |
| 12 | +* ์ฌ๋ ๊ดํธ๋ฅผ ๋ง๋๋ฉด ์คํ์ push |
| 13 | +* ๋ซ๋ ๊ดํธ๋ฅผ ๋ง๋๋ฉด ์คํ์ top๊ณผ ๋งค์นญ ํ์ธ |
| 14 | + * ์คํ์ด ๋น์ด์์ผ๋ฉด โ ๋งค์นญ๋๋ ์ฌ๋ ๊ดํธ๊ฐ ์์ (False) |
| 15 | + * top๊ณผ ์ข
๋ฅ๊ฐ ๋ค๋ฅด๋ฉด โ ์๋ชป๋ ์์ (False) |
| 16 | + * ๋งค์นญ๋๋ฉด โ pop์ผ๋ก ์ ๊ฑฐ |
| 17 | +* ๋ชจ๋ ์ฒ๋ฆฌ ํ ์คํ์ด ๋น์ด์์ด์ผ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด |
| 18 | +
|
| 19 | +๊ตฌํ |
| 20 | +๋์
๋๋ฆฌ๋ก ๋ซ๋ ๊ดํธ์ ์ฌ๋ ๊ดํธ์ ๋งค์นญ ๊ด๊ณ๋ฅผ ์ ์ํ๋ค. |
| 21 | +* matching = {')': '(', '}': '{', ']': '['} |
| 22 | +* ๋ซ๋ ๊ดํธ๋ฅผ key๋ก ์ฌ์ฉํ์ฌ O(1)์ ๋งค์นญ ํ์ธ ๊ฐ๋ฅ |
| 23 | +
|
| 24 | +์ฃผ์ํ ์ |
| 25 | +* ์ฌ๋ ๊ดํธ๋ง ์๋ ๊ฒฝ์ฐ โ ์คํ์ ๋จ์์์ผ๋ฏ๋ก False |
| 26 | + ์: "(((" โ stack = ['(', '(', '('] |
| 27 | +* ๋ซ๋ ๊ดํธ๋ง ์๋ ๊ฒฝ์ฐ โ ์คํ์ด ๋น์ด์์ด์ False |
| 28 | + ์: ")))" โ stack์ด ๋น์ด์์ |
| 29 | +* ์์๊ฐ ์๋ชป๋ ๊ฒฝ์ฐ โ ๋งค์นญ ์คํจ๋ก False |
| 30 | + ์: "([)]" โ ']'๋ฅผ ์ฒ๋ฆฌํ ๋ top์ด '['์ธ๋ฐ ')'๋ฅผ ๊ธฐ๋ |
| 31 | +""" |
| 32 | + |
| 33 | +class Solution: |
| 34 | + def isValid(self, s: str) -> bool: |
| 35 | + stack = [] |
| 36 | + # ๋ซ๋ ๊ดํธ : ์ฌ๋ ๊ดํธ ๋งคํ |
| 37 | + matching = {')': '(', '}': '{', ']': '['} |
| 38 | + |
| 39 | + for char in s: |
| 40 | + if char in matching: # ๋ซ๋ ๊ดํธ์ธ ๊ฒฝ์ฐ |
| 41 | + # ์คํ์ด ๋น์ด์๊ฑฐ๋ ๋งค์นญ ์๋๋ฉด False |
| 42 | + if not stack or stack[-1] != matching[char]: |
| 43 | + return False |
| 44 | + stack.pop() # ๋งค์นญ ์ฑ๊ณต์ ์ ๊ฑฐ |
| 45 | + else: # ์ฌ๋ ๊ดํธ์ธ ๊ฒฝ์ฐ |
| 46 | + stack.append(char) # ์คํ์ ์ถ๊ฐ |
| 47 | + |
| 48 | + # ๋ชจ๋ ๊ดํธ๊ฐ ๋งค์นญ๋์์ผ๋ฉด ์คํ์ด ๋น์ด์์ด์ผ ํจ |
| 49 | + return len(stack) == 0 |
0 commit comments