백준 9012번: 괄호

이동섭·2021년 7월 2일
0

Problem Solving

목록 보기
9/49


✔ 풀이를 위한 아이디어

  • 스택(Stack) 구조의 이해와 이를 바탕으로 한 효율적인 코드 작성

✔ 코드

import sys

N = int(sys.stdin.readline())

strings = []
for i in range(N):
    string = sys.stdin.readline().strip()
    strings.append(string)

for i in range(N):
    left = 0
    for j in range(len(strings[i])):
        if strings[i][j] == '(':
            left += 1
        elif strings[i][j] == ')':
            if left <= 0:
                print("NO")
                break
            else:
                left -= 1
        if j == (len(strings[i]) - 1):
            if left > 0:
                print("NO")
            else:
                print("YES")
  • 스택(Stack)을 활용하여 문제를 푸는 것은 맞지만, 실제로 스택 구조를 구현하지는 않고 left라는 변수에 '('의 개수를 추가해주는 식으로 작성하였다. (push하는 요소들에 차이가 없기 때문)
  • 문자열을 index 0부터 탐색하면서 '('일 때는 push를, ')'일 때는 pop을 하는식이다.
  • pop할 요소가 남지 않았는데 pop을 하거나, pop할 요소가 남았는데 문자열이 끝난다면 "NO"를 출력하도록 하였다.
  • readline().strip()은 문자열을 받을 때 '\n'을 제외하고 입력받는다.

✔ 관련 개념

  • 자료구조 중 스택(Stack) 구조

0개의 댓글