IT recording...
[BOJ] 2504 괄호의 값 - python 본문
풀이
문제를 보자마자 stack을 사용해서 append시키고 pop시키고 해서 풀어야 할 것을 직감했다. 근데 계산된 결과를 어찌할 지 감을 못잡고 있다가 풀이를 보고 stck에 함께 넣어 관리하기로 하였다.
⇒ 스택에 숫자를 함께 넣으므로 바로 앞에 있는 것이 숫자인 경우(그 앞의 부호를 다시 확인하여야 한다.), 여는 괄호인 경우를 나누어 진행한다. ⇒ 바로 앞이 숫자일 경우 → 그 앞의 것도 숫자이면 더하기 연산을 진행하고, 다시 연산을 진행해야 하므로 재귀시킨다. 그 앞의 것이 맞는 괄호인 경우 곱하기 연산을 진행한다. ⇒ 바로 앞이 여는 괄호인 경우 → 맞는 괄호이면 숫자를 stack에 넣는다. |
코드
import sys
def input():
return sys.stdin.readline().rstrip()
arr = input()
answer = 0
brackets = ["(",")","[","]"]
stck = []
brackets_dict = {"(":0,")":0,"[":0,"]":0}
for i,a in enumerate(arr):
if i < len(arr)-1:
# (] [) 의 경우 불가
if (arr[i] == '(' and arr[i+1] == ']') or (arr[i] == '[' and arr[i+1] == ')'):
print(0)
exit()
brackets_dict[a]+=1
#()끼리, []끼리 짝이 안맞을 경우
if not (brackets_dict["("] == brackets_dict[")"] and brackets_dict["["] == brackets_dict["]"]):
print(0)
exit()
def function(a,stck):
if a == '(' or a == '[': #여는 괄호이면
stck.append(a)
else: #닫는 괄호이면
if stck[-1] not in brackets: #숫자면
if stck[-2] not in brackets: #두번째꺼도 숫자면
stck.append(stck.pop() + stck.pop()) #더하기
#stck.append(a)
function(a,stck)
else: #맞는 짝이면 해당 숫자
if stck[-2] == '(' and a == ')':
f, s = stck.pop(), stck.pop()
stck.append(f * 2)
elif stck[-2] == '[' and a == ']':
f, s = stck.pop(), stck.pop()
stck.append(f * 3)
else: #숫자가 아니라 닫는 괄호 중 맞는 괄호면
if stck[-1] == '(' and a == ')':
stck.pop()
stck.append(2)
elif stck[-1] == '[' and a ==']':
stck.pop()
stck.append(3)
def isNumber(stck): #stck에 남아있는 것들이 숫자만 존재하는지 판별
for s in stck:
if s in brackets:
return True
return False
for a in arr:
function(a,stck)
while isNumber(stck): #stck에 숫자만 남을 때까지 진행
function(stck[-1],stck)
print(sum(stck))
얻어가는 것
- runtime error (index error)
- → list 인덱스 잘못 사용한 것이다. 경계값을 잘 사용했는지 다시 한 번 확인하기
느낀점
"211215"
소요 시간 : 2D 이상
- 시험기간에 실버라 그래서 호기롭게 도전햇는데 젠장 조건이 꽤나 까다로웠다
- 나의 머리로는 도저히 풀지 못하겠어서 풀이 봤는데 풀이가 더 어려워 세상에
- 그래서 시험끝나고 재도전! 역시 머리를 비우고 풀어야한다
'Algorithm' 카테고리의 다른 글
[BOJ] 2904 수학은 너무 쉬워 - Java (0) | 2022.02.04 |
---|---|
[BOJ] 2042 구간 합 구하기 - python (0) | 2021.12.21 |
[BOJ] 6416 트리인가? - python (0) | 2021.12.07 |
[BOJ] 1991 트리 순회 - python (0) | 2021.12.07 |
[BOJ] 10828 스택 - python (0) | 2021.12.06 |
Comments