728x90
반응형
import sys
ans = []
arr = [[0]]
while 1:
if arr[-1][0] == '.':
break
arr.append(sys.stdin.readline().rstrip())
for k in range(1,len(arr)-1):
tmp = []
for i in arr[k]:
if i == '(' or i == '[' or i == ')' or i == ']':
tmp.append(i)
if '(' not in arr[k] and '[' not in arr[k] and ')' not in arr[k] and ']' not in arr[k]:
ans.append('yes')
x = len(tmp)
if len(tmp) > 0:
##############판단 하는 부분#############
for j in range(x):
for i in range(len(tmp) - 1):
if tmp[i] == '(' and tmp[i + 1] == ')':
tmp = tmp[:i] + tmp[i + 2:]
break
elif tmp[i] == '[' and tmp[i + 1] == ']':
tmp = tmp[:i] + tmp[i + 2:]
break
#########################################
if len(tmp) == 0:
ans.append('yes')
else:
ans.append('no')
for i in ans:
print(i)
판단하는 부분만 부연 설명을 좀 달아보면 다음과 같다.
우선 입력값을 순차적으로 받고 리스트에도 순차적으로 쌓일 것이다.(스택)
나 같은 경우는 입력받은 문장에서 (,), [,]만 추출하도록 만들었다.
그렇게 해서 tmp 리스트에 넣었다.
'(' 다음에 ')' 가 오거나 '[' 다음에 ']'가 올 경우 균형이 맞게 된다.
따라서 해당 인덱스를 제거해준다.
처음 tmp번 만큼 인덱스가 제거된 리스트들을 전체 탐색을 반복하면 무조건 결과를 알 수 있다.
3중 반복문에 비효율적인 방법이긴 하지만 더 좋은 아이디어가 떠오르지 않았다.
또한 str 타입에서는 del을 사용할 수 없기 때문에 슬라이싱 해서 붙여주는 방법을 사용했다.
728x90
반응형
'Algorithm & Data Structure' 카테고리의 다른 글
백준 - 18528번(큐 구현하기) (0) | 2022.01.30 |
---|---|
백준 - 1874번(스택) (0) | 2022.01.30 |
백준 - 15954번(정수론, 전체탐색) (0) | 2022.01.28 |
백준 - 9375번 (0) | 2022.01.27 |
백준 - 2981번 (0) | 2022.01.25 |