[SWEA] 4866 괄호 검사

Yujin Jo·2022년 3월 29일
0

SWEA

목록 보기
16/22
post-thumbnail

문제 출처 : [SWEA] 4866 괄호 검사
learn -> course -> programming intermediate -> stack1 -> 괄호 검사

문제

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

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

정상적으로 짝을 이룬 경우 1, 그렇지 않으면 0을 출력한다.

print(‘{‘) 같은 경우는 입력으로 주어지지 않으므로 고려하지 않아도 된다.

입력

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

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

출력

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

코드

T = int(input())
for tc in range(1, T + 1):
    code = input()      # 문제에서 주어진 문자열
    code_list = []      # 열린 괄호를 저장할 리스트
    result = 1          # 결과값을 반환할 변수 초기화

    # 문자열의 길이만큼 반복하는 반복문
    for i in range(len(code)):
        # 해당 문자열에 열린 괄호가 있으면 append
        if code[i] == '(' or code[i] == '{':
            code_list.append(code[i])
        # 해당 문자열에 닫는 괄호가 나오면 리스트에서 pop한 값과 비교
        elif code[i] == ')' or code[i] == '}':
            # 이미 리스트가 비어 있을 경우 result = 0, break
            if len(code_list) == 0:
                result = 0
                break
            # pop한 값과 괄호가 일치하지 않을 경우 result = 0, break
            elif code[i] == '}' and code_list.pop() == '(':
                result = 0
                break
            elif code[i] == ')' and code_list.pop() == '{':
                result = 0
                break

    # 리스트에 괄호가 남아있으면 result = 0
    if len(code_list) != 0:
        result = 0

    print(f'#{tc} {result}')
print(f'#{tc} {result}')

풀이 방법

stack에 append하고 pop하는 방식으로 푸는 문제였다. 열린 괄호가 나오면 append 해주고 닫는 괄호가 나오면 stack에서 pop한 값과 비교해서 올바른 괄호인지 판단해 주었다. 마지막에 닫는 괄호는 없는 데 열린 괄호만 있는 경우에도 올바르지 않은 경우니까 result를 0으로 바꿔주어야 한다.

profile
일단 해보자

0개의 댓글