코딩 테스트/파이썬 알고리즘 인터뷰
Python 알고리즘 인터뷰 - 문제20. 유효한 괄호
스마트코더91
2024. 1. 24. 12:20
leetcode 20. Valid Parentheses
https://leetcode.com/problems/valid-parentheses/description/
문제
괄호로 된 입력된이 올바른지 판별하라
예제
입력
()[]{}
출력
True
풀이
문제의 입력값이 괄호만 존재하는지, 아니면 다른 문자가 같이 섞여있는지에 따라 코드가 달라진다. 처음 풀이할 때 다음과 같이 문자가 있는 경우를 가정하고 풀었기 때문에 해당 코드로 진행하였다.
<입력값에 대한 처리 리스트>
"(a{b[cd]e}f)" -> True
")", "(" -> False
"[abc}" -> False
우선 문자열에서 현재 위치 문자를 ch라고 했을 때 ,여는 괄호( '(', '{', '[' )를 만나면 stack에 push, 일반 문자면 pass하면서 진행한다.
이후 닫는 괄호( ')', '}', ']' ) 를 만나면 스택에서 최상단의 여는 괄호와 같은지 비교한다. 같은 pair이면 pass하고 아니면 실패이므로 return False 한다.
루프를 모두 마쳤을 때 stack에 값이 남아있다는 것은 여는 괄호는 있는데 닫는 괄호가 없다는 뜻이므로 실패 처리한다.
전체 코드는 다음과 같다.
def isValid(s):
closes = [')', ']', '}']
pairs = {'(': ')', '[': ']', '{': '}'}
st = []
for ch in s:
if ch in pairs:
st.append(ch)
if ch in closes:
if len(st) == 0:
return False
if pairs[st.pop()] != ch:
return False
return len(st) <= 0