🚩 문제 설명
⏱️ 시간 복잡도
▪️ 테스트 케이스의 갯수 T가 주어진다.
▪️ 각 테스트 케이스 마다 VPS 인지 아닌지 확인 해야한다.
▪️ 괄호 문자열의 길이는 2 이상 50 이하 이다.
▪️ 시간 복잡도는 O ( T x 50 ) 이라고 볼 수 있다.
▪️ O ( N x N ) 이라고 볼 수도 있다.
◾ 괄호 문자열이란 (Parenthesis String, PS)
- '(' 와 ')' 로 구성되어 있는 문자열을 뜻한다.
- 그 중에서 괄호의 모양이 바르게 구성된 문자열을 Valid PS로 VPS 라고 부른다.
◾ 주어지는 PS 들이 VPS인지 아닌지 구분하는 프로그램을 작성하는 문제.
✅ 입출력
return ➡️ PS가 VPS인지 아닌지 YES or No로 반환한다.
✔️ 예제 1
6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
NO
NO
YES
NO
YES
NO
✔️ 예제 2
3
((
))
())(()
NO
NO
NO
📑 문제 풀이
with 파이썬 (Python)
N = int(input())
pss = [input() for _ in range(N)]
for ps in pss:
flag = True
check = 0
for p in ps:
if p == '(':
check += 1
else:
check -= 1
if check < 0:
flag = False
break
if check == 0 and flag == True:
print("YES")
else:
print("NO")
💬 Point
➡️ N : 테스트 케이스의 갯수
➡️ pss : PS 문장이 담겨있는 배열
➡️ check : VPS라면 check 가 0이 되어야 한다.
➡️ flag로 VPS인지 아닌지 확인한다.
◾ check를 이용하여 VPS인지 아닌지 판별한다.
- 만약 '(' 괄호가 나온다면 +1 을 한다.
- ')' 괄호가 나온다면 -1 을한다.
- VPS는 쌍을 이루기 때문에 check가 0이 되어야 한다.
- 만약 ()) 이런식이면 +-- 가 돼서 - 가 된다. 이러면 flag를 False로 만들고 break 한다.
◾ flag가 True이고 check가 0인 값들만 YES라고 출력한다.
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글
[자료구조] [BJ10845] 큐 (0) | 2021.11.24 |
---|---|
[자료구조] [BJ1406] 에디터 (0) | 2021.11.24 |
[자료구조] [BJ9093] 단어 뒤집기 (0) | 2021.11.23 |
[자료구조] [BJ10828] 스택 (0) | 2021.11.23 |
[BJ1874] 스택 수열 (0) | 2020.01.17 |