런타임 에러 (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 |
'Problem Solving > 알고리즘' 카테고리의 다른 글
[알고리즘][왜이거써요?]list 와 deque, 분기를 잡자, 자주쓰는 list 함수 (0) | 2022.10.06 |
---|---|
[백준][파이썬] 1662 - 압축 (0) | 2022.07.13 |
[백준] 1931 - 회의실 배정 (그리디 알고리즘) (0) | 2022.07.08 |
[백준]1946 - 신입사원 (0) | 2022.07.07 |
[백준] [파이썬] 11497 - 통나무 건너뛰기 (1) | 2022.07.06 |