이런 소괄호 중괄호 맞게 찾기는 스택으로 풀어야한다. 옛날에 자료구조 공부할때 교수님이 스택으로 문제를 푸셨었다.
만약에 괄호 하나만 확인하는 거면 굳이 스택으로 풀 필요가 없지만 이번 문제는 소괄호와 대괄호로 2개이기 때문에 스택으로 풀어봤다.
1. 만약 (, [ 이라면 스택에 쌓는다.
2. ), ] 가 나오면 스택에 top에 쌓인게 소괄호인지 중괄호인지 비교하여 같으면 스택에서 제거한다.
3. 만약 ), ] 가 먼저 나오면 잘못 입력된 것이기 때문에 바로 종료시킨다.
대강 이러한 느낌으로 코딩을 짜면 코드는 아래와 같다. 좀더 효율적으로 짤 수 있었을거 같은데 내가 좀 무식하게 코딩하다 보니 저렇게 돼버렸다.ㅎㅎ
while True:
tmp = input()
if tmp == ".":
break
stack = []
for i in tmp:
if i == "(":
stack.append("(")
elif i == ")":
if len(stack) == 0:
stack.append("wtf")
break
if stack[-1] == "(":
stack.pop()
else:
break
elif i == "[":
stack.append("[")
elif i == "]":
if len(stack) == 0:
stack.append("wtf")
break
if stack[-1] == "[":
stack.pop()
else:
break
else:
continue
if len(stack) == 0:
print("yes")
else:
print("no")
'알고리즘' 카테고리의 다른 글
백준 17298 풀이 (오큰수, 스택) (0) | 2021.03.08 |
---|---|
백준 1874 풀이 (스택 수열, 스택) (0) | 2021.03.04 |
백준 10773 풀이 (sys.stdin.readline()) (0) | 2021.03.04 |
백준 10828 풀이 (스택, sys.stdin.readline, 입력속도 높이기) (0) | 2021.03.04 |
백준 2004 풀이 (조합 0의 개수) (0) | 2021.03.03 |