[백준] 9012번: 괄호
[링크]
[문제]
[풀이]
핵심
- 올바른 괄호 문자열은 '('(여는 괄호)와 ')'(닫는 괄호) 개수가 같아야 한다.
- 여기서 순서가 중요한데 개수만 같아서 올바른 괄호 문자열이 되는 건 아니다.
VPS함수는 올바른 괄호 문자열이면 True, 아니면 False를 반환한다.
right변수는 닫는 괄호의 개수를 카운트 한다.
문자열의 오른쪽부터 순서대로 순회를 한다.
닫는 괄호는 right +=1, 여는 괄호는 right-=1
이때 right가 음수가 된다면, 여는 괄호가 닫는 괄호 없이 먼저 나왔다는 의미이므로
더 이상은 올바른 괄호 문자열이 될 수 없어 False 반환 한다.
모든 문자열을 다 순회 하고 right가 0이라면 여는 괄호와 닫는 괄호가 짝이 맞는다는 의미이므로 True반환.
[코드]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # 9012번(괄호) def VPS(vps_str): #들어온 문자열을 list로 만든다. vps_list=list(vps_str) #닫는 괄호 개수 카운트 right=0 while vps_list: #비교 문자열 comp=vps_list.pop() if comp == '(': right-=1 else: right+=1 #닫는 괄호의 개수가 음수가 되면 바로 False 리턴. if right<0: return False return True if right==0 else False N=int(input()) for _ in range(N): vps_str=input() print('YES' if VPS(vps_str) else 'NO') | cs |
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2884번: 알람 시계 (0) | 2020.11.25 |
---|---|
[백준] 1920번: 수 찾기 (0) | 2020.11.25 |
[백준] 8958번: OX퀴즈 (0) | 2020.11.23 |