본문 바로가기
Algorithm Problem Solving/SW Expert Academy

[Python] SW Expert Academy - 4866. 괄호 검사

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 7. 27.
728x90
반응형

SW Expert Academy 4866번 괄호 검사 괄호 짝 맞추기 문제는 주어진 입력에서 중괄호, 소괄호 {}, ()가 제대로 짝을 이뤘는지 검사하는 문제이다. stack 스택 자료구조의 개념과 기본 연산 및 응용 능력을 확인하는 가장 기본적인 문제로 난이도는 D2다.

 

SW Expert Academy 4866번 괄호 검사 문제 정보

자료구조 분류

- 스택 Stack

난이도

- D2

 

괄호 검사 문제 요약

  • 주어진 입력에서 괄호 {}, ()가 제대로 짝을 이뤘으면 1, 그렇지 않으면 0을 출력한다.
  • 입력은 한 줄의 파이썬 코드일 수도 있고, 괄호만 주어질 수도 있다.
  • print(‘{‘) 같은 경우는 입력으로 주어지지 않으므로 고려하지 않는다.

문제 풀이 과정

  1. 입력받은 문자열을 차례로 검사한다.
  2. 열린 괄호를 찾으면 스택에 push 한다.
  3. 닫힌 괄호를 찾으면
    • 스택이 비어있거나 괄호의 짝이 맞지 않으면 검사를 종료한다.
    • 괄호의 짝이 맞으면 스택에서 pop 하고 검사를 계속한다.
  4. 문자열 검사 완료 후에도 스택에 괄호가 남아있으면 짝이 맞지 않는 것이다.
  5. 테스트 케이스 번호, 짝을 이룬 여부를 출력한다.
코드 및 설명
  • matching_dict {} - 괄호의 짝이 각각 키와 값으로 가지는 딕셔너리
  • stack [] - 괄호를 저장해 놓을 스택 (리스트)
def bracket_check(inputValue):
    # 괄호의 짝 딕셔너리
    matching_dict = {'}': '{', ')': '('}
    stack = []
    for i in inputValue:
        # 열린 괄호를 찾으면 스택에 push
        if i in ('{', '('):
            stack.append(i)
        # 닫힌 괄호를 찾으면
        elif i in ('}', ')'):
            # 스택이 비어있거나 괄호의 짝이 맞지 않으면
            if not stack or stack[len(stack) - 1] != matching_dict[i]:
                return 0
            stack.pop()  # 짝이 맞으면 pop
    # 검사 후에도 스택에 괄호가 남아 있으면
    if stack:
        return 0
    else:
        return 1


T = int(input())
for tc in range(T):
    print('#%d %d' % (tc + 1, bracket_check(input())))

SW Expert Academy 4866번 괄호 검사 괄호 짝 맞추기 문제는 자료구조 중 스택 stack에 관한 문제이며 파이썬을 사용하였다. 난이도는 D2인데, 해결법은 알겠지만 코드로 구현하는 과정에서 삽질을 해서 2시간 30분이나 걸려서 풀었다.

728x90
반응형

댓글