본문 바로가기
Develop/Python + SWEA

[SW Expert Academy] 1223. 계산기2

by Tarra 2022. 2. 25.

1223. 계산기2


문제)

 

문자열로 이루어진 계산식이 주어질 때, 이 계산식을 후위 표기식으로 바꾸어 계산하는 프로그램을 작성하시오.

예를 들어

“3+4+5*6+7”

라는 문자열로 된 계산식을 후위 표기식으로 바꾸면 다음과 같다.

"34+56*+7+"

변환된 식을 계산하면 44를 얻을 수 있다.

문자열 계산식을 구성하는 연산자는 +, * 두 종류이며 피연산자인 숫자는 0 ~ 9의 정수만 주어진다.

[입력]

각 테스트 케이스의 첫 번째 줄에는 테스트 케이스의 길이가 주어진다. 그 다음 줄에 바로 테스트 케이스가 주어진다.

총 10개의 테스트 케이스가 주어진다.

[출력]

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 답을 출력한다.

 

 

 

 

 

풀이)

 

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
def postfix(a): # 후위 표기식 변환
    stack = []
    operator = {"+" : 2"*" : 3}
    fix = ""
    for i in a:
        if not stack and i in operator: # 스택이 비어 있으면
            stack.append(i)
 
        elif stack and i in operator: # 스택이 비어있지 않고, i가 연산자이면
            while stack:
                if operator[i] <= operator[stack[-1]]:
                    fix += stack.pop()
                else:
                    break
            stack.append(i)
        else:
            fix += i
    else:
        for j in range(len(stack)):
            fix += stack.pop()
    return fix
 
def cal(b):
    stack = []
    operator = ["+""*"]
    for i in b:
        if not i in operator: # 피연산자이면 스택에 push
            stack.append(i)
 
        else#연산자이면.
            y = int(stack.pop())
            x = int(stack.pop())
            if i == "+":
                stack.append(x + y)
            elif i == "*":
                stack.append(x * y)
    else:
        return stack
 
for _ in range(10):
    n = int(input())
    sentence = input()
    print(f"#{_ + 1}"*cal(postfix(sentence)))
cs

문제 출처 : https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.

학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.