4 종류의 괄호문자들 '()', '[]', '{}', '<>' 로 이루어진 문자열이 주어진다.
이 문자열에 사용된 괄호들의 짝이 모두 맞는지 판별하는 프로그램을 작성한다.
예를 들어 아래와 같은 문자열은 유효하다고 판단할 수 있다.
아래와 같은 문자열은 유효하지 않은 문자열이다. 붉은색으로 표시된 괄호의 짝을 찾을 수 없기 때문이다.
아래 문자열은 열고 닫는 괄호의 개수는 유효하나 짝이 맞지 않는 괄호가 사용 되었기 때문에 유효하지 않다.
[입력]
각 테스트 케이스의 첫 번째 줄에는 테스트케이스의 길이가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다.
총 10개의 테스트케이스가 주어진다.
[출력]
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 유효성 여부를 1 또는 0으로 표시한다 (1 - 유효함, 0 - 유효하지 않음).
input.txt
181
(({<(({{[[[[<<[[(<[[{([{{{[<[[[{<(<[[{}[]{}{}[]]]><><...
298
{(({[({([{(<[([(([<({[{{[[({{[({([<{(<[[((<{{[([{<<[{(<({[<(...
...
output.txt
#1 0
#2 0
...
Solve
데이터 받아오기 Data = input()
스택 Stack 배열에 append 시키며
데이터 확인 -> 들어온 데이터 닫는 괄호고, 앞에 여는 괄호가 스택에 존재하면 pop실행하며 짝이 맞는지 확인
ans 로 성공 실패
Code
for tc in range(1, 11):
n = int(input()) #괄호개수input에 있는것
stack=[]
Data = input()
ans=0
for i in range(len(Data)):
if Data[i] in "({[<":
stack.append(Data[i])
elif stack and ((Data[i]==")" and stack[-1]=="(") or (Data[i]=="}" and stack[-1]=="{") or (Data[i]=="]" and stack[-1]=="[") or (Data[i]==">" and stack[-1]=="<")):
stack.pop()
else:
break
if not stack : ans = 1
print(f"#{tc} {ans}")
# 본 문제의 저작권은 SW Expert 아카데미에 있습니다.