티스토리 뷰
'어서와! 자료구조와 알고리즘은 처음이지?'
중위표기법과 후위표기법
1) 중위 표기법
✔ 연산자가 피 연산자들의 사이에 위치
(A+B) * (C+D)
2) 후위 표기법
✔ 연산자가 피 연산자들의 뒤에 위치
AB+CD+*
3) 중위 표현식 → 후위 표현식 : 스택(Stack) 이용
알고리즘 설계
1. 연산자의 우선순위 설정
prec = {
'*' : 3, '/' :3,
'+' : 2, '-' :2,
'(' :1
}
2. 중위 표현식을 왼쪽부터 한 글자 씩 읽어서 피연산자 이면 그냥 출력
3. '(' 이면 스택에 push, ')' 이면 '('이 나올 때까지 스택에서 pop 출력
4. 연산자이면 스택에서 그 보다 높거나 같은 우선 순위 것들을 pop 출력, 현재 만난 연산자는 스택에 push
3. 수식 끝까지 간 후에 스택에 남아있는 연산자는 모두 pop 출력
[문1. 중위 표현 수식 → 후위 표현 수식]
'''
중위 수식 -> 후위 수식
0. 피연산자인 경우 그냥 push
1. '(' 이면 스택에 push
2. 연산자의 우선순위 설정
우선순위가 높거나 같으면 pop, 아닌 경우 push(현재 연산자)
-- >2-1. 스택이 비어있지 않는 동안
-- > 2-2 스택이 비어 있으면 연산자 push
3. ')' 이면 '(' 나올 때 까지 pop()
4. 수식 끝까지 간 후 에 스택에 남아있는 연산자는 모두 pop 출력
'''
class ArrayStack:
def __init__(self):
self.data = []
def size(self):
return len(self.data)
def isEmpty(self):
return self.size() == 0
def push(self, item):
self.data.append(item)
def pop(self):
return self.data.pop()
def peek(self):
return self.data[-1]
prec = {
'*': 3, '/': 3,
'+': 2, '-': 2,
'(': 1
}
def solution(S):
opStack = ArrayStack()
answer = ''
for s in S:
# 0. 피 연산자인 경우 그냥 push
if s.isalpha():
answer += s
continue
#1. '(' 이면 스택에 push
if s == '(':
opStack.push(s)
continue
#2. 우선순위가 높거나 같으면 pop, 아닌 경우 push
if s in prec:
# opStack이 비어있지 않는 동안
while not opStack.isEmpty():
print(True)
if prec[opStack.peek()] >= prec[s]:
answer += opStack.pop()
continue
else:
opStack.push(s)
break
# opStack이 비어 있으면 연산자 push
if opStack.isEmpty():
opStack.push(s)
# 3. ')' 이면 '(' 나올 때 까지 pop()
if s == ')':
while not opStack.isEmpty():
if opStack.peek() != '(':
answer += opStack.pop()
else:
opStack.pop()
break
# 4. 수식 끝까지 간 후에 스택에 남아있는 연산자는 모두 pop 출력
while not opStack.isEmpty():
answer += opStack.pop()
return answer
res = solution("(A+B)*C")
print(res)
'Algorithm > 알고리즘' 카테고리의 다른 글
[프로그래머스 강의] 14강 큐 (0) | 2022.05.09 |
---|---|
[프로그래머스 강의] 13강 스택(Stack) (3) (0) | 2022.05.08 |
[프로그래머스 강의] 11강 스택(Stack) (1) (0) | 2022.05.04 |
[프로그래머스 강의] 10강 연결리스트(Linked List) (4) (0) | 2022.05.02 |
[프로그래머스 강의] 9강 연결리스트(Linked List) (3) (0) | 2022.04.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 보험
- 운영체제
- 알고리즘
- 자료구조와알고리즘 23강
- 정렬
- Greedy sort
- 완전탐색
- 프로그래머스강의
- 리스트
- 파이썬
- SW
- 코드업 기초
- 자료구조
- 이진탐색
- CS
- 이차 리스트
- 연결리스트활용
- 자바
- https
- 데이터베이스
- 네트워크
- 리스트 복사
- 프로세스 주소공간
- CS.
- It
- 리스트2
- 프로그래머스
- 리스트함축
- 스터디
- CS 스터디
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함