공부 자료/알고리즘

(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