알고리즘 공부
[파이썬] 백준 9012 - 괄호
Developer KTU
2021. 3. 8. 19:21
반응형
스택 자료구조 알고리즘을 사용할 수 있는지 물어보는 문제이다. ( ※ '코드라이언' 알고리즘 강좌를 들으며 풀었음! )
<나의 코드>
import sys
def stack_push(stack, val):
stack.append(val)
def stack_pop(stack):
return stack.pop()
T = int(sys.stdin.readline())
for tc in range(T):
S = sys.stdin.readline()
stack = []
is_VPS = True
for i in range(len(S)):
if S[i] == '(':
stack_push(stack, '(')
elif S[i] == ')':
if len(stack) == 0:
is_VPS = False
break
last = stack_pop(stack)
if last == '(':
continue
if len(stack) != 0:
is_VPS = False
if is_VPS:
print("YES")
else:
print("NO")
스택관련 함수를 만든다. (stack_push, stack_pop 함수) → tc를 돌린다, 매 tc마다 문자열을 새로 입력받고, stack 리스트를 초기화 시킨다. → is_VPS는 VPS가 맞는지 아닌지 판단해주는 변수 → 문자열 S만큼 순회하면서 괄호를 판단하는 로직
< 시행착오 >
S 문자열에서 추출하고 stack 리스트에 넣은 괄호를 어떤 방식으로 추출하고 VPS 판단을 어떻게 하는지
< 해결방법 >
S문자열을 순회하면서 '(' 는 일단 stack 리스트에 넣고, ')'가 나오면 '(' 스택 리스트에서 하나씩 pop하면서 VPS 여부 판단 → 스택이 비어있다면 VPS, 스택 리스트가 비어있지 않다면 VPS 아님 ( 로직이 이해가 가지 않는다면 코멘트 남겨주시기 바랍니다..! )
★ 추신
이 문제는 '코드라이언'에서 스택강좌를 들을때 배운 문제이다. 스택에 관한 기본 지식과 구현방법은 알고 있었지만, 그 이외 디테일한 부분을 더욱 보완하기 위해 열심히 코딩해야겠다! 조만간 정처기 공부도 들어가야 하는데 바쁘다 바빠! ( 바쁘게 사는게 좋다 난 ㅋㅋㅋㅋ )
반응형