["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
package main import ( "errors" "fmt" "strconv" ) type stack struct { buffer []int size int capacity int } func CreateStack(capacity int) stack { s := stack{} s.buffer = make([]int, capacity) s.capacity = capacity s.size = 0 return s } func (s *stack) Push(v int) error { s.buffer[s.size] = v s.size++ return nil } func (s *stack) Pop() (int, error) { if s.size == 0 { return 0, errors.New("None Elememt") } s.size-- return s.buffer[s.size], nil } func (s stack) Info() { fmt.Println("Elements :", s.buffer[:s.size]) fmt.Println("Size :", s.size) fmt.Println("Cap :", s.capacity) } func main() { val, _ := evalRPN("35+42+*") fmt.Println(val) } func evalRPN(token string) (int, error) { myStack := CreateStack(10) for i := 0; i < len(token); i++ { num, err := strconv.Atoi(string(token[i])) if err != nil { a, _ := myStack.Pop() b, _ := myStack.Pop() switch string(token[i]) { case "+": myStack.Push(a + b) case "-": myStack.Push(a - b) case "*": myStack.Push(a * b) case "/": myStack.Push(a / b) default: // Ignore } } else { myStack.Push(num) } } return myStack.Pop() }
Copyrights © - Joinc, All Rights Reserved. Inherited From - Yundream Rebranded By - Joonphil
Reverse Polish Notation 평가
Stack을 이용한 구현
Recent Posts
Archive Posts
Tags