깡뇽

[백준] 9012번 괄호 파이썬 본문

Algorithm/BAEKJOON

[백준] 9012번 괄호 파이썬

깡뇽 2022. 3. 21. 23:18
반응형

자료구조에 있는 문제를 풀어보았다.

원래는 replit이라는 웹 IDE를 사용했었는데 가끔씩 오류가 나곤 했었다. 그래도 참고 사용했지만...

결국 오늘 GitHub에 Codingtest 이름의 repository를 만들었다.

Pycharm에서 앞으로 문제를 풀고 GitHub에 올리려고 한다...!

 

9012번 괄호 풀이

[시도1] 맞았습니다!!

n = int(input())

for _ in range(n):
    line = input()
    stack = []

    for i in line:
        if i == '(':
            stack.append('(')
        elif i == ')':
            if len(stack) == 0:
                stack.append(')')
                break
            else:
                stack.pop()

    if len(stack) != 0:
        print('NO')
    else:
        print('YES')

유형이 자료 구조에 속한 문제였어서 어떤 자료 구조를 사용해야하나 고민하다가 stack을 선택했다. 

사실 굳이 자료 구조를 사용하지 않고 cnt와 같은 카운트 변수를 두고 변화를 확인해도 된다.

나는 stack이라는 이름의 리스트에 ( 가 입력되면 append로 추가를 하고, ) 가 입력되면 stack에 있던 ( 를 pop하여 꺼내준다. 단, ) 가 들어왔을 때 stack에 꺼낼 ( 가 있어야 하는데 없다면 짝이 맞지 않는 것이므로 ) 를 추가한 뒤에 break를 하여 반복문을 멈춘다. 여기서 ) 를 추가하는 것이 아니라 사실 아무거나 추가해도 된다. 그 이유는 마지막에 결국 stack의 길이가 0이 아닐 때에 NO를 출력하므로 아무거나 넣어서 stack의 길이가 0이 아니게 만들면 된다. stack의 길이가 0이면 ( 와 ) 가 짝이 맞다는 것이므로 YES를 출력한다.

어려운 문제는 아니지만 if문을 처리하면서 조금 헛다리를 짚어서 돌아돌아 풀 수 있었다.

반응형