https://www.acmicpc.net/problem/9012
스택을 이용하는 기본적인 문제이다. 스택을 이용해서 열리는괄호가 나오면 스택에 넣어주고,
아니면 스택에서 하나씩 빼서 괄호와 비교하면 된다. 물론 끝나고 나서는 스택에 아무것도 없어야 짝이
맞는다는 소리이므로 길이 체크도 해 주자.
# -*- encoding: cp949 -*- bracket_dict = {'(':')'} for i in xrange(int(raw_input())): stack = [] flag = True for b in raw_input(): #print stack if b =='(': #열리는괄호면 스택에 넣고 stack.append(b) else: try: pop = stack.pop() #)같이 그냥 )가 들어왔을때를 대비한 try except문. if bracket_dict[pop]!=b: flag = False break except: flag = False break if len(stack)!=0: flag = False print 'YES' if flag else 'NO'
https://www.acmicpc.net/problem/2504
2504번문제는 위 문제의 확장판이라 할 수 있다. 기본 틀은 동일하되 나같은경우 닫는 괄호가 나오면
숫자를 계산해주는 방식으로 풀었다.
# -*- encoding: cp949 -*- bracket_dict = {'(':')', '[':']'} stack = [] flag = True s = raw_input() for i in xrange(len(s)): #print stack if s[i] in ['(', '[']: #여는 괄호면 스택에 넣음. stack.append(s[i]) else: try: #입력이 그냥 ]나 )처럼 닫는 괄호가 나올 경우를 대비한 try except이다. pop = stack.pop() except: print 0 flag = False break temp = 0 while pop!='[' and pop!='(': #pop했는데 숫자가 나올 경우 temp에다가 계속 더해준다. temp += pop pop = stack.pop() if s[i]==bracket_dict[pop]: if s[i]==')': if temp==0: stack.append(2) else: stack.append(2*temp) else: if temp==0: stack.append(3) else: stack.append(3*temp) else: print 0 flag = False break if flag: try: #[나 (같이 여는 괄호가 있을 경우를 위한 try except이다. print sum(stack) except: print 0
'algorithm > problem solving' 카테고리의 다른 글
acmicpc.net 1786(kmp), 1305(kmp), 1157 (0) | 2016.08.25 |
---|---|
acmicpc.net 10828(스택), 10845(큐), 1874(스택), 9933 (0) | 2016.08.24 |
acmicpc.net 11723(비트마스크) (0) | 2016.08.15 |
acmicpc.net 1931(그리디), 1744(그리디?), 2846 (0) | 2016.08.14 |
acmicpc.net 1005(위상 정렬), 2623(위상 정렬) c++ (0) | 2016.08.10 |