https://www.acmicpc.net/problem/9012
문제 설명
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
풀이 과정
- 나의 풀이
① 이 문제에서 직관적으로 확인한 것은 '입력값 T만큼의 테스트가 이루어지고 테스트마다 괄호 문자열이 주어져 괄호 문자열이 올바른지 아닌지 파악하는 문제구나'이다
② 아이디어 열기
올바른 괄호 문자열이되기 위한 조건은 무엇인지부터 파악해야할 것 같다.
(1) 괄호 문자열에서 문자 '('와 문자 ')'의 갯수가 같아야한다.
(2) (1)을 만족하는 경우라도 )))(((와 같은 문자열은 올바르지 못한 괄호 문자열이다.
조건을 만족시키기 위해서는 반복문 안에 조건을 걸고 전체적으로 조건을 한개 더 걸어주어야한다.
이를 실제 코드에 구현해보면 다음과 같다.
# 9012
n = int(input())
for i in range(n) :
ps = input()
ps_lst = list(ps)
sum = 0
for j in ps_lst :
if j == "(" :
sum += 1
elif j == ")" :
sum -= 1
if sum < 0 : ## 반복문 내에 있는 조건문 조건(2)를 만족하기 위해서.
print("NO")
break
if sum > 0 : ## 조건(1)을 만족하기 위한 조건문.
print("NO")
elif sum == 0:
print("YES")
후기
조건(2)를 만족시키기 위해 고민했었는데 알고 보니 반복문을 진행하며 조건을 걸어 확인하는 방법이 있었다...!!!
'Algorithm' 카테고리의 다른 글
[백준] 11718 그대로 출력하기 파이썬(Python) (0) | 2021.07.10 |
---|---|
[백준] 1935 후위 표기식2 (파이썬 Python) (0) | 2021.07.10 |
[백준] 2743 단어 길이 재기 (파이썬 Python) (0) | 2021.07.08 |
[백준] 11729 하노이 탑 이동 순서 (파이썬 Python) (0) | 2021.07.08 |
[백준] 2562 최댓값 (파이썬 Python) (0) | 2021.07.08 |