본문 바로가기
Algorithm/코딩테스트 (Python)

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

by 싱브이 2023. 10. 25.
728x90
반응형

문제

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

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

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

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

 

 

 

 

내 생각

Stack을 이용한다. stack은 LIFO의 구조로 후입선출이다! 즉, 가장 나중에 들어간 것이 먼저 나오는 것을 잘 생각해야함.

입력받은 문자열의 원소를 꺼내보면서 괄호를 여는 '{' or '('가 있으면 stack에 저장한다.(append)

괄호를 닫는 '}' or ')'가 있으면 저장된 stack의 top(나중에 넣은 = 먼저 나오는)을 꺼내서(pop) 비교한다.  -> if문으로 괄호 여는 원소가 오면 return 0, 또는 닫는 괄호가 필요한데 stack에 원소가 존재하지 않으면 return 0

마지막으로 확인이 다 끝났는데 stack에 원소가 남아있으면 return 0

 

 

 

 

내 코드

T = int(input())
for test_case in range(1, T + 1):
    input_str = input()
    stack = []
    answer = 1  
    for char in input_str:
        if char in '{(':
            stack.append(char)
        elif char in '})':
            if not stack:
                answer = 0
                break  
            top = stack.pop()
            if (char == ')' and top != '(') or (char == '}' and top != '{'):
                answer = 0
                break  
    if stack:
        answer = 0  
    print(f'#{test_case} {answer}')
728x90
반응형

댓글