Stay Hungry Stay Foolish

SWEA

[SWEA] 1222. [S/W 문제해결 기본] 6일차 - 계산기1 (Python/D4)

dev스카이 2024. 10. 31. 13:44

[문제 링크] 👇

 

SW Expert Academy

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

swexpertacademy.com


풀이

💡 스택 이용

 

스택과 후위표기식을 담을 리스트 생성

stack = []
postfix = []
  • 파이썬엔 스택 함수가 따로 없기 때문에 리스트를 스택처럼 사용하면 된다.
  • 리스트 내장함수에는 pop(), append(), insert() 등이 있다.

 

입력 받은 중위 표기식 리스트에서 하나씩 꺼낸다.

  1. "+" 이면 stack에 추가한다.
  2. 숫자이면 postfix 에 담는다.
    • 숫자일 때, stack이 비어있지 않다면 stack에서 첫 번째 요소를 빼고 postfix 에 추가한다.

 

후위 표기식을 다 끝냈다면, postfix 에서 하나씩 꺼낸다.

  • 후위 표기식에서 숫자인 것만 int 형으로 변환하고 결과에 누적하면서 더한다.

 

Solution

for test_case in range(1, 11):
    _ = int(input())
    infix = input().strip()  # 중위 표기식
    stack = []  # 스택
    postfix = []  # 후위 표기식
    result = 0  # 연산 결과를 담을 변수
    
    for i in infix:
        if i == "+":
            stack.append(i)
        else:
            postfix.append(i)
            if len(stack) > 0:
                postfix.append(stack.pop(0))
                
    for i in postfix:  # 연산 결과
        if i != "+":
            result += int(i)
    print(f"#{test_case} {result}")

 

 

👩‍💻 회고

이 문제가 왜 D4 에 있는지..? 후위 표기식의 결과를 출력하라고 했다면 더 좋았을 텐데, 이건 단순히 연산 결과만 출력하는 것이기 때문에 굳이 후위 표기식으로 처리할 필요가 없다. 아쉬운 문제다.

 

그래도 이번 기회로 전, 후위로 변환하는 과정을 코딩할 수 있었다는 점이 괜찮았다.