[SWEA] 1224 [S/W 문제해결 응용] 6일차 - 계산기3 (파이썬 python)

2022. 8. 12. 15:33· Algorithm/SWEA

 

 

문제 링크

 

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14tDX6AFgCFAYD 

 

SW Expert Academy

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

swexpertacademy.com

 

 

 

문제 풀이

 

 

for tc in range(1, 11):
    length = int(input())
    exp = list(map(str, input()))
    postfix = []
    stack = []
    stack_cal = []
    prior = {'*': 3, '/': 3, '+': 2, '-': 2, '(': 1}
    for e in exp:
        if e.isdigit():
            postfix.append(e)
        elif e == '(':
            stack.append(e)
        elif e == ')':
            while stack[-1] != '(':
                postfix.append(stack.pop())
            stack.pop()
        else:
            while stack and prior[e] <= prior[stack[-1]]:
                postfix.append(stack.pop())
            stack.append(e)
    while len(stack) != 0:
        postfix.append(stack.pop())

    for p in postfix:
        if p.isdigit():
            stack_cal.append(int(p))
        elif p == '+':
            a = stack_cal.pop()
            b = stack_cal.pop()
            stack_cal.append(a + b)
        elif p == '-':
            a = stack_cal.pop()
            b = stack_cal.pop()
            stack_cal.append(a - b)
        elif p == '*':
            a = stack_cal.pop()
            b = stack_cal.pop()
            stack_cal.append(a * b)
        elif p == '/':
            a = stack_cal.pop()
            b = stack_cal.pop()
            stack_cal.append(a / b)
    print("#{} {}".format(tc, stack_cal.pop()))

 

 

연산자에 대한 우선순위를 먼저 저장해둔다

첫 번째 for문은 주어진 계산식을 후위 표기식으로 변환하는 과정이다!

주어진 계산식을 리스트화하여 하나씩 값을 빼내어 그 값이

1) 만약 숫자일 경우 바로 후위표기식에 대한 리스트(postfix)에 넣어준다

2) 만약 여는 괄호 '('일 경우 연산자들을 넣어두는 stack에 넣어준다

3) 닫는 괄호 ')'가 나왔을 경우 stack에 저장된 연산자들을

다시 여는 괄호가 나올 때까지 모두 빼서 후위표기식 리스트에 넣어준다

4) 그 외의 연산자가 나왔을 경우

stack에 들어있는 것과 우선순위를 비교하여 더 낮을 경우

stack에 있는 연산자들을 먼저 pop 해주어 후위 표기식 리스트에 넣어준다

그 다음 리스트에서 나온 연산자를 넣어준다

 

마지막으로 스택에 남은 모든 연산자들을

후위표기식 리스트에 넣어주면 후위표기식이 완성된다

 

 

두 번째 for문에서는 후위표기식을 계산한다

새롭게 계산을 위한 스택(stack_cal)을 생성한다

 

후위표기식 리스트에서 하나씩 꺼내어

1) 숫자가 나올 경우 stack_cal에 넣어주고

2) 연산자가 나올 경우 앞서 stack_cal에 넣어둔 숫자들을 pop()으로 빼내어

연산자에 맞는 연산을 실행한 후 다시 스택에 넣어준다

 

이 과정이 끝나면 stack_cal에는 후위 표기식의 계산 결과만 남게 된다

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > SWEA' 카테고리의 다른 글

[SWEA] 1219 [S/W 문제해결 응용] 4일차 - 길찾기 (파이썬 python)  (0) 2022.08.12
[SWEA] 1234 [S/W 문제해결 응용] 10일차 - 비밀번호 (파이썬 python)  (0) 2022.08.12
[SWEA] 1267 [S/W 문제해결 응용] 10일차 - 작업순서 (파이썬 python)  (0) 2022.08.12
'Algorithm/SWEA' 카테고리의 다른 글
  • [SWEA] 1219 [S/W 문제해결 응용] 4일차 - 길찾기 (파이썬 python)
  • [SWEA] 1234 [S/W 문제해결 응용] 10일차 - 비밀번호 (파이썬 python)
  • [SWEA] 1267 [S/W 문제해결 응용] 10일차 - 작업순서 (파이썬 python)
YOONJELLY
YOONJELLY
JELLYJELLYYOONJELLY 님의 블로그입니다.
YOONJELLY
JELLYJELLY
YOONJELLY
전체
오늘
어제
  • 분류 전체보기 (153)
    • Springboot (2)
    • Android (15)
    • Algorithm (126)
      • 개념 (8)
      • BOJ (91)
      • Programmers (15)
      • SWEA (4)
    • 경험_기록 (1)
    • RIM_TIP (4)
    • Github (2)
    • CS (1)
      • 운영체제 (1)
      • 컴퓨터네트워크 (0)
      • 정보처리기사 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • softeer
  • 소프티어
  • 이것이코딩테스트다
  • kotlin
  • 프로그래머스
  • 코딩테스트
  • DP
  • 다이나믹프로그래밍
  • 이진탐색
  • BOJ
  • 완전탐색
  • DFS
  • SWEA
  • 딕셔너리
  • 정렬
  • 알고리즘
  • 코틀린
  • 큐
  • 안드로이드
  • 백준
  • 문자열
  • 그리디
  • 자료구조
  • Android
  • BFS
  • 파이썬
  • 스택
  • Python
  • programmers
  • 액티비티컴포넌트

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
YOONJELLY
[SWEA] 1224 [S/W 문제해결 응용] 6일차 - 계산기3 (파이썬 python)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.