대괄호 중괄호 소괄호로 이루어진 입력을 받아서 열리고 닫힘의 유무와 겹침의 유무를 보는 문제이다.
문제에 보면 조건이 세 개 있는데, 괄호끼리 페어를 이룰 것, 먼저 열리고 닫힐 것, 서로 겹치지 않을 것이다. 이중 세번째 조건이 가장 어려웠는데,
이 코드를 보고 구현을 하게 되었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#brackets2
open = ['[', '{', '(']
close = [']', '}', ')']
case = int(input())
for i in range(case):
bra = list(input()) # 입력
cross = []
checkval = True # true=안겹침, false=겹침
for k in range(len(bra)):
if bra[k] in open: # 열리는 괄호가 나오면
cross.append(bra[k]) # 리스트에 넣는다
continue
if len(cross) == 0: # 닫힌게 먼저 들어온다면
checkval = False
break
if close.index(bra[k]) == open.index(cross[-1]): # bra에서 새로 보는 괄호와 cross에 있는 괄호가 같은 종류라면
del cross[-1] # cross에 있는 괄호는 여는 괄호이므로, 닫힌 괄호를 만났을 시 지운다
continue
else:
checkval = False # 다른 종류의 닫히는 괄호가 나오면 겹친다는 것이므로
break
if checkval: # 안겹치고
if len(cross) == 0: # 남아있는 것이 없으면 (열린것과 닫힌 것의 갯수가 같다면)
print("YES")
else:
print("NO")
else:
print("NO")
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'코테용 문제풀이 > 알고스팟' 카테고리의 다른 글
알고스팟 록 페스티벌(festival) 문제 파이썬으로 풀기 (0) | 2019.10.08 |
---|---|
알고스팟 weird numbers (weird) 문제 파이썬으로 풀기 (0) | 2019.09.22 |
알고스팟 yulo 문제 파이썬으로 풀기 (0) | 2019.09.06 |
알고스팟 note 문제 파이썬으로 풀기 (0) | 2019.09.05 |
알고스팟 divisibility 문제 파이썬으로 풀기 (0) | 2019.08.27 |