[SWEA-4866] 괄호검사

ego2·2023년 2월 4일
0
post-thumbnail

문제링크

문제 조건

주어진 입력에서 괄호 {}, ()가 제대로 짝을 이뤘는지 검사하는 프로그램을 만드시오.

예를 들어 {( )}는 제대로 된 짝이지만, {( })는 제대로 된 짝이 아니다. 입력은 한 줄의 파이썬 코드일수도 있고, 괄호만 주어질 수도 있다.

정상적으로 짝을 이룬 경우 1, 그렇지 않으면 0을 출력한다.
print(‘{‘) 같은 경우는 입력으로 주어지지 않으므로 고려하지 않아도 된다.

[입력]

첫 줄에 테스트 케이스 개수 T가 주어진다.  1≤T≤50

다음 줄부터 테스트 케이스 별로 온전한 형태이거나 괄호만 남긴 한 줄의 코드가 주어진다.

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

[출력]

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

#1 1
#2 1
#3 0

💡아이디어

문자열을 입력 받아 왼쪽괄호를 만나면 스택에 삽입,
오른쪽 괄호를 만나면 스택에서 top괄호(맨위에있는 왼쪽괄호)를 pop()하여 오른쪽 괄호와 짝이 >맞는지 확인한다.
이후 3가지 조건을 확인하여 조건에 해당되면 결과 0 반환하도록한다.

조건 1 : 스택이 비어있음
조건 2 : 괄호의 짝이 맞지 않음
조건 3 : 문자열 끝까지 조사한 후에도 스택에 괄호가 남아있음

🧑‍💻PASS 코드

def bracket_test(input_str):
    stack = []
    result = 1
    for i in input_str:
        if i == '{' or i == '(':
            stack.append(i)
        elif i == '}' or i == ')':
            if len(stack) == 0: # 조건 1
                result = 0
                break
            elif i == '}' and stack.pop() == '(':   # 조건 2
                result = 0
                break
            elif i == ')' and stack.pop() == '}':   # 조건 2
                result = 0
                break

    if len(stack):      # 조건 3
        result = 0
    return result

T = int(input())

for test_case in range(1, T+1):
    input_str = input()

    print("#{} {}".format(test_case, bracket_test(input_str)))
profile
Talk is cheap. Show me the code.

0개의 댓글