문제
https://www.acmicpc.net/problem/4949
걸린 시간
00 : 45 : 30
풀이
Python3
class Stack:
def __init__(self):
self.stack = []
def is_empty(self):
return len(self.stack) == 0
def push(self, data):
self.stack.append(data)
def pop(self):
if self.is_empty():
return -1
else:
return self.stack.pop()
def peek(self):
if self.is_empty():
return -1
else:
return self.stack[-1]
def switch(i):
return {'(': '1', '[': '1', ']': '2', ')': '2'}.get(i, '-1')
def match_bracket(i):
return {')': '(', ']': '['}.get(i, '-1')
def Match(expr):
s = Stack()
# 문자열을 하나씩 분리한다.
for i in expr:
ch = switch(i)
# 왼쪽 괄호이면
if ch == '1':
# 스택에 추가
s.push(i)
# 오른쪽 괄호이면
elif ch == '2':
op = s.pop()
# 스택에 있는 값과 비교
if op == match_bracket(i):
# 같을 경우
pass
else:
# 다를 경우
return False
# 괄호가 아닌 문자이면
else:
pass
if s.is_empty():
return True
else:
return False
if __name__ == "__main__":
# 문자열을 저장할 리스트 선언.
arr = []
while True:
# 종료조건인 '.' 를 구분자로 입력받는다.
temp = input().split('.')[0]
# 점 하나만 입력되었을 경우 입력을 종료한다.
if temp == '':
break
# 문자열 리스트에 저장.
arr.append(temp)
# 입력받은 문장을 하나씩 분리하여 괄호를 스택에 추가한다.
for i in arr:
if Match(i):
print("yes")
else:
print("no")
입력을 어떻게 받아야 할지가 더 고민되었던 문제이다.
'Baekjoon' 카테고리의 다른 글
Baekjoon 2941번 크로아티아 알파벳 (0) | 2020.07.21 |
---|---|
Baekjoon 1316번 그룹 단어 체커 (0) | 2020.07.21 |
Baekjoon 11866번 요세푸스 문제 0 (0) | 2020.07.21 |
Baekjoon 1966번 프린터 큐 (0) | 2020.07.20 |
Baekjoon 1874번 스택 수열 (0) | 2020.07.20 |
댓글