https://www.acmicpc.net/problem/4949
문자열들이 .(점)으로 구분되어 주어졌을 때, 각 문자열이 갖는 소괄호와 대괄호가 짝지어져 입력되었는지 확인하는 문제이다.
괄호 문제를 보자마자 스택으로 접근해야겠다는 생각이 들었고, 문제 해결 방법은 아래와 같다.
- 입력받은 문자열을 문자단위로 접근한다.
- 만약 열린 괄호인 경우, 스택에 추가한다.
- 만약 닫힌 대괄호인 경우, 스택의 마지막 괄호가 열린 대괄호인지 확인한다.
- 스택이 비어있지 않고 스택의 마지막 요소가 열린 대괄호이면, 해당 열린 대괄호를 스택에서 제거한다.
- 그렇지 않다면 닫힌 대괄호를 스택에 추가한다.
- 만약 열린 소괄호인 경우, 스택의 마지막 괄호가 열린 소괄호인지 확인한다.
- 스택이 비어있지 않고 스택의 마지막 요소가 열린 소괄호이면, 해당 열린 소괄호를 스택에서 제거한다.
- 그렇지 않다면 닫힌 소괄호를 스택에 추가한다.
- 문자열 접근이 끝나고 최종 스택 크기에 따라 답을 출력한다.
- 스택 크기가 0이면 yes를 출력한다.
- 그렇지 않다면 no를 출력한다.
소스 코드
while True:
string = input()
stack = []
if string == ".":
break
for word in string:
if word == "(" or word == "[":
stack.append(word)
elif word == "]":
if stack and stack[-1] == "[":
stack.pop()
else:
stack.append(word)
break
elif word == ")":
if stack and stack[-1] =="(":
stack.pop()
else:
stack.append(word)
break
if len(stack) == 0:
print("yes")
else:
print("no")
'PS > 백준' 카테고리의 다른 글
[백준] 10773번 제로 (python) (0) | 2023.12.21 |
---|---|
[백준] 16953번 A → B (python) (0) | 2023.12.20 |
[백준] 9012번 괄호 (python) (1) | 2023.12.09 |
[백준] 2251번 물통 (python) (1) | 2023.12.03 |
[백준] 13904번 과제 (python) (0) | 2023.11.05 |