✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/백준 알고리즘
[자료구조] [BJ9012] 괄호
yeomss
2021. 11. 23. 17:08
🚩 문제 설명
⏱️ 시간 복잡도
▪️ 테스트 케이스의 갯수 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