https://www.acmicpc.net/problem/9012
[문제 이해]
괄호 문자열(Parenthesis String, PS): 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열
올바른 괄호 문자열(Valid PS, VPS) : 괄호의 모양이 바르게 구성된 문자열
ex) “(())()”, “((()))” → VPS O / “(()(”, “(())()))” , “(()” → VPS X
[풀이 생각]
스택을 이용한 괄호 문제는 자료구조 시간에 배운 문제여서 생각을 쉽게 할 수 있었다.
- '(' 인 경우 스택에 push해준다. ')' 인 경우 스택에서 pop해준다.
- 만약 스택에 아무것도 들어있지 않은데 pop해야 하는 경우가 있다면 올바른 괄호 문자열이 아니다. ex) “())”
- 만약 괄호 비교를 마친 후에도 스택에 '('가 남아있다면 올바른 괄호 문자열이 아니다. ex) “()(”
[정답]
1. 테스트 데이터의 개수 T를 입력받는다.
2. 0~T-1동안 for문을 돌면서 VPS여부를 확인한다.
3. 스택 word_stack와 스택의 VPS여부를 확인할 ans을 정의한다.
4. 괄호 테스트 데이터 word를 입력받는다.
5. 0~len(word)-1동안 for문을 돌면서 만약 괄호가 '('라면 스택에 push해준다. 만약 괄호가 ')'라면 먼저 word_stack에 요소 여부를 확인하고 요소가 없다면 ans=1하고 break한다. word_stack에 요소가 있다면 스택에서 pop한다.
6. 최종적으로 ans==1(스택에 아무것도 들어있지 않은데 pop해야 하는 경우) 와 len(word_stack)>0(괄호 비교를 마친 후에도 스택에 '('가 남아있는 경우) 라면 'NO'를 출력한다. 이 경우에 해당하지 않는 경우에는 'YES'를 출력한다.
'알고리즘 공부 > 백준 > Python3' 카테고리의 다른 글
[백준 파이썬] #11650: 좌표 정렬하기 (0) | 2021.01.13 |
---|---|
[백준 파이썬] #1037: 약수 (0) | 2021.01.13 |
[백준 파이썬] #10773: 제로 (0) | 2021.01.13 |
[백준 파이썬] #1316: 그룹 단어 체커 (0) | 2021.01.11 |
[백준 파이썬] #1157: 단어 공부 (0) | 2021.01.09 |