공부 자료/알고리즘
(Python/파이썬) 백준 2504번 - 괄호의 값
뚜루뚜루세니
2021. 8. 18. 09:58
728x90
문제출처: https://www.acmicpc.net/problem/2504
2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
1. 코드
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
s= list(input())
stack =[]
for i in s:
if i ==')':
tmp = 0
while stack:
top = stack.pop()
if top =='(':
if tmp==0:
stack.append(2)
else:
stack.append(2*tmp)
break
elif top == '[':
print(0)
exit(0)
else:
if tmp ==0:
tmp = int(top)
else:
tmp = tmp + int(top)
elif i==']':
tmp =0
while stack:
top = stack.pop()
if top =='[':
if tmp==0:
stack.append(3)
else:
stack.append(3*tmp)
break
elif top == '(':
print(0)
exit(0)
else:
if tmp ==0:
tmp = int(top)
else:
tmp = tmp + int(top)
else:
stack.append(i)
result =0
for i in stack:
if i =='(' or i=='[':
print(0)
exit(0)
else:
result += i
print(result)
|
cs |
2. 해결과정
stack을 사용해서 해결하는 문제였다.
리스트를 사용해서 스택을 선언하고, 스택에 괄호를 여는 ( [ 기호와 연산 결과를 저장해주면 된다.
1) 입력받은 문자열을 순서대로 검사
2) 괄호를 여는 기호 -> 스택에 append
3) 괄호를 닫는 기호를 만나면 -> 자신에게 알맞는 기호를 만날때까지 스택 pop
4) 자신에게 맞지 않는 닫는 기호 만나면 -> 0을 출력 -> 종료
스택에 연산결과를 push하고 tmp변수를 이용해서 연산해주는 부분을 추가했다.
입력이 ()()인 경우에는 스택에 [2,2]가 저장된다,
for문을 통해서 마지막에 전부 연산의 합을 더해주면 된다.
tmp변수를 활용해서 기존 저장 값 전부 더해주고, 괄호 안에 값에 괄호에 맞는 곱셈을 해주면 된다.
3. 느낀점
완전한 괄호 형식인지 구분도 해야하고, 숫자도 넣어줘야하고 헷갈리는 부분이 많았던 문제였다.
728x90