-
2021-01-20] Valid ParenthesesIT/자기계발 ( Leetcode ) 2021. 1. 20. 23:27반응형
오늘의 문제:
문제 예시를 보며 설명해보자.
문제예시 1-5 입력값으로 주어지는 문자열은 소, 중, 대 괄호만으로로 이뤄진다.
주어진 값에 대해서 괄호가 잘 닫혔는지, 이상은 없는지 확인하는 문제이다.
각 괄호들로 알맞게 닫혀져있는지 확인하여 참 ,거짓을 판별하자.
먼저, 실패조건을 생각해본다.
1) 주어진 문자열의 길이는 무조건 짝수여야한다. ( 쌍으로 열고 닫히기 때문에 )
if len(s)%2==1: # 주어진 s의 길이가 홀수면 False return False
2) 닫히는 괄호가 먼저 나오면 무조건 실패 ( 예시 -> '][()()', 먼저 열려야해서 실패 )
if not openl: # openl은 열린 괄호를 저장하는 변수, 열린 괄호를 만나기 전 닫힌 괄호를 만나면 False return False
3) 마지막으로 열려진 괄호와 닫히는 괄호의 종류가 다르면 실패 ( 3,4 예시 )
data=openl.pop() # 마지막 열린괄호의 값을 구하고 닫힌괄호와 합쳤을 때 괄호의 종류가 다르면 False if data+s[i] in ['()','{}','[]' ]: continue else: return False
4) 열린 괄호와 닫힌 괄호의 숫자가 맞지 않으면 실패 ( 예시 -> '[ [ ( ) ]' )
if openl==[]: # 결과적으로 열린 괄호가 닫힌 괄호와 숫자가 맞게 pop되면 괄호는 더 이상 없음 return True else: return False
이를 구현한 코드로 보자.
문제풀이)
class Solution: def isValid(self, s: str) -> bool: openl=[] if len(s)%2==1: return False else: for i in range(len(s)): if s[i] in ['{','[','(']: openl.append(s[i]) else: if not openl: return False data=openl.pop() if data+s[i] in ['()','{}','[]' ]: continue else: return False if openl==[]: return True else: return False
반응형'IT > 자기계발 ( Leetcode )' 카테고리의 다른 글
2021-01-22] Determine if Two Strings Are Close (0) 2021.01.22 2021-01-21] Find the Most Competitive Subsequence (0) 2021.01.22 2021-01-19] Longest Palindromic Substring (0) 2021.01.19 2021-01-17] Count Sorted Vowel StringsSolution (0) 2021.01.18 2021-01-18] Max Number of K-Sum Pairs (0) 2021.01.18