본문 바로가기
알고리즘/BOJ

[BOJ] 09012. 괄호

by ㅣlㅣl 2022. 9. 7.

문제

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

 


 

주요 아이디어

괄호 짝이 올바르게 구성되었는지 확인하는 문제.

간단하게 스택을 사용하면 풀 수 있을 것 같다.

 

1. 문자열 순서대로 읽기
2. 문자열의 괄호 순차대로 읽기
       “(” 일 경우 스택에 쌓기
       “)”일 경우
              스택에 “(” 존재할 경우 스택 pop
              스택에 “(” 존재하지 않을 경우 exception
3. 문자열 종료 시 스택 len ≥ 1일 경우, exception_flag == 1
→ PS X

나머지 경우 → PS

 


 

코드 구현 (Python 3)

 

더보기
# 스택으로 VPS 검사

N = int(input()) # 예제 개수 입력받기
stack = []
exception_flag = 0

for i in range(N):
    string = input()
    for j in range(len(string)):
        if string[j] == '(': # push
            stack.append(string[j])
        else: #pop
            if len(stack) == 0:
                exception_flag = 1
                break
            else:
                stack.pop()
    if len(stack) != 0 or exception_flag == 1:
        print("NO")
    else:
        print("YES")
    stack.clear()
    exception_flag = 0

 

 

제출 결과

 

 


 

코드 개선 방안

  • 위 코드에서는 파이썬 기본 내장 메서드인 append(), pop()을 사용했다.
  • 직접 구현해본 자료구조 스택을 사용해도 괜찮을 것 같다.

 

 

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 10845. 큐  (0) 2022.09.07
[BOJ] 10828. 스택  (0) 2022.09.07
[BOJ] 10816. 숫자카드 2  (0) 2022.09.07
[BOJ] 10814. 나이순 정렬  (0) 2022.09.07
[BOJ] 10250. ACM 호텔  (0) 2022.09.07