Programming/SWEA

[SWEA 4866].[파이썬 S/W 문제해결 기본] 4일차 - 괄호검사

토토모에요 2021. 8. 4. 13:03
728x90
반응형

SW Expert Academy에서 학습용으로 문제를 가져왔습니다. 문제가 될 시 수정, 삭제하겠습니다.

https://swexpertacademy.com/main/main.do

문제 : 
주어진 입력에서 괄호 {}, ()가 제대로 짝을 이뤘는지 검사하는 프로그램을 만드시오.
예를 들어 {( )}는 제대로 된 짝이지만, {( })는 제대로 된 짝이 아니다. 입력은 한 줄의 파이썬 코드일수도 있고, 괄호만 주어질 수도 있다.
정상적으로 짝을 이룬 경우 1, 그렇지 않으면 0을 출력한다.
print(‘{‘) 같은 경우는 입력으로 주어지지 않으므로 고려하지 않아도 된다.

[입력]
첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤50
다음 줄부터 테스트 케이스 별로 온전한 형태이거나 괄호만 남긴 한 줄의 코드가 주어진다.

[출력]
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

input

3
print('{} {}'.format(1, 2))
N, M = map(int, input().split())
print('#{} {}'.format(tc, find())

output

#1 1
#2 1
#3 0

code

Test_case=int(input())

for t in range(1, Test_case+1):
    stack=[]                   
    ans=1
    string=str(input()) #문자열 입력
    arr=list(string)    #리스트 사용
    for i in range(0, len(arr)):   
        if arr[i]=='(' or arr[i]=='{':  #만약 arr에 (나 {가 나오면
            stack.append(arr[i])        #만들어두었던 stack에 추가
        elif arr[i]==')' or arr[i]=='}': #아니면 arr가 )나 }가 나왔을때
            if not stack:                #stack이 비어있는데
                ans=0                    #ans=0과 동시에
                break                   #멈춤

            P=stack.pop()                #stack에서 pop하는 것을 P로 지정
            if arr[i] == ')' and P!='(': #만약 arr가 )이거나 pop한게 (가 아니면 즉 ()가 성립 안하게 되는 경우
                ans=0                    #ans=0이 나오도록
            elif arr[i]=='}' and P!='{':  #만약 arr가 }이거나 pop한게 {가 아니면 즉 {}가 성립 안하게 되는 경우
                ans=0                     #ans=0
    if stack:                             #만약 stack이면
        ans=0                             #ans=0
    print("#{} {}".format(t,ans))  

이 문제는 stack의 개념과 pop함수를 이용하면 풀리는 문제였습니다.

반응형