Problem Solving/알고리즘

[백준][파이썬] 2504 - 괄호의 값 (런타임에러 발생..해결)

Supersett 2022. 7. 12. 12:31

런타임에러!! IndexError 발생!!

런타임 에러 (IndexError) 왜 발생했을까?

답은 스택 배열이 비어있는 상태에서 stack[-1]의 값을 조회할때 에러가 발생하는것이었다. 비어있는 상태라면 조회를 할수없게 코드를 분리해서 해결하였다.

 

파이썬에서의 Stack 은 List를 활용하자!

append() : 마지막에 값추가

pop() : 마지막에 들어온 값 제거 (반환받아서 값을 사용할수도 있음)

list[-1] : 제일 top에 있는 값 조회 가능 ( 비어있을때 조회시 에러 발생하므로 유의할것)

not list : 비어있는지 확인

 

입력값을 받을때 rstrip()을 꼭 사용하자! (주의)

1
2
3
t=sys.stdin.readline()
 
t=sys.stdin.readline().rstrip()
cs

위 아래의 입력된 값이 달라서 len(입력값)에 차이가 있었다. 주의하자

 

제출 코드

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
29
30
31
32
33
34
35
36
37
38
39
40
import sys
t=sys.stdin.readline().rstrip()
stack=[]
answer=0
temp=1
 
for i in range(len(t)):
    if t[i]=="(":
        temp*=2
        stack.append(t[i])
    elif t[i]=="[":
        temp*=3
        stack.append(t[i])
    elif t[i]==")":
        if not stack:
            answer=0
            break
        if stack[-1]=="[":
            answer=0
            break
        if t[i-1]=="(":
            answer+=temp
        stack.pop()
        temp//=2
    else:
        if not stack:
            answer = 0
            break
        if stack[-1== '(':
            answer = 0
            break
        if t[i-1== '[':
            answer += temp
        temp //= 3
        stack.pop()
 
if stack:
    print(0)
else:
    print(answer)
cs