๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ’ป leetcode/algorithms

[LeetCode] Algorithms | 20. Valid Parentheses | Python

by ๋ฐ”์ฟ„๋ฆฌ 2024. 7. 23.

Problems

 

๋ฌธ์ œ๋ฅผ ์ฝ๊ณ , ๊ทธ๋ƒฅ ์ˆœ์„œ ์ƒ๊ด€์—†์ด s์•ˆ์— ์ง ๋งž๋Š” ๊ด„ํ˜ธ๋งŒ ์žˆ์œผ๋ฉด ๋˜๋Š” ์ค„ ์•Œ์•˜๋‹ค.

๊ทธ๋ž˜์„œ ์ง  ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ง„์งœ ๋‹จ์ง€ ์ง๋งŒ ๋งž์œผ๋ฉด ๋˜๊ธฐ์—, ๊ฐ™์€ ๊ด„ํ˜ธ ์ง์ˆ˜ ๊ฐœ์ธ์ง€ ํ™•์ธํ•˜๊ณ  return

wrong ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ณด๋‹ˆ๊นŒ, ๊ฐ™์€ ๊ด„ํ˜ธ๋ผ๋ฆฌ๋Š” ๋ถ™์–ด์žˆ์–ด์•ผํ•˜๋‚˜๋ณด๋‹ค.

 

๋งŒ์•ฝ s = '( [ { } ] )' ์ผ ๊ฒฝ์šฐ์—๋Š” ์—ฌ๋Š” ๊ด„ํ˜ธ ์ˆœ์„œ  ( → [ → {  ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ  } → ] → ) ์ˆœ์„œ๋Š” ๋ฐ˜๋Œ€์ด๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์—ฌ๋Š” ๊ด„ํ˜ธ ์ˆœ์„œ๋กœ stack์— ์Œ“์•„์ฃผ๊ณ , ๋’ค์— ์Œ“์ธ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์™€์„œ ๋‹ซ๋Š” ๊ด„ํ˜ธ ํ™•์ธํ•˜๋Š” ๊ฑธ๋กœ ํ•ด์•ผ๊ฒ ๋‹ค.

๊ทธ๋Ÿผ LIFO ๊ฐ€ ๋˜๋Š”๊ฑฐ๊ณ , list์—์„œ ๋’ค์— ์š”์†Œ๋ถ€ํ„ฐ ๊ฐ€์ง€๊ณ  ์™€์„œ ์ง€์›Œ์ฃผ๋Š” pop ์„ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค

(remove๋Š” ์•ž ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๊ณ  ์ง€์›Œ์ค€๋‹ค.)

 

๊ทธ๋ž˜์„œ ์ž‘์„ฑํ•œ ์Šคํฌ๋ฆฝํŠธ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

class Solution:
    def isValid(self, s: str) -> bool:

        stack = []
        bracket_pairs = {'(':')', '[':']', '{':'}'}

        if len(s)%2 == 1: # ์ง ๋งž๋Š” ์ง€ ํ™•์ธ
            return False

        for char in s:
            if char in bracket_pairs.keys(): # ์—ฌ๋Š” ๊ด„ํ˜ธ์ด๋ฉด stack์— ์Œ“๊ธฐ
                stack.append(char)
            elif not stack: # ๋‹ซ๋Š” ๊ด„ํ˜ธ๋กœ ์‹œ์ž‘ ํ•˜๋ฉด False
                return False
            elif bracket_pairs[stack.pop()] != char: # ๊ด„ํ˜ธ ์ง์ด ์•ˆ๋งž์œผ๋ฉด False
                return False
		
        # s="((" ๊ฐ™์ด ์—ฌ๋Š” ๊ด„ํ˜ธ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ์— stack์— ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.
        # ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด์„œ stack์— ๋‚จ์•„์žˆ๋Š”๊ธฐ ๊ฒ€์‚ฌํ•œ๋‹ค.
        return len(stack) == 0

 

์„ฑ๊ณต