dev/algorithm
BOJ / 15815번 / 천재 수학자 성필 [Go][Python3]
crscnt
2021. 2. 18. 21:00
👩🏻💻 문제
15815번: 천재 수학자 성필
길이가 100이 넘지 않는 수식이 예제 입력과 같이 공백 없이 입력된다. 수식은 0부터 9까지의 숫자와 연산자 '+', '-', '*', '/' 로만 이루어져 있다. 또한, 수식의 계산 중간 과정의 모든 결과는 항상 2
www.acmicpc.net
✍🏻 풀이
🎨 Go
// https://www.acmicpc.net/problem/15815
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var formula string
fmt.Fscanln(reader, &formula)
formulas := strings.Split(formula, "")
numbers := []int{}
for len(formulas) > 0 {
popped := formulas[0]
formulas = formulas[1:]
if popped == "+" || popped == "-" || popped == "*" || popped == "/" {
first := numbers[len(numbers)-2]
second := numbers[len(numbers)-1]
numbers = append(numbers[:len(numbers)-2], compute(popped, first, second))
} else {
number, _ := strconv.Atoi(popped)
numbers = append(numbers, number)
}
}
fmt.Fprintln(writer, numbers[0])
}
func compute(operator string, first, second int) int {
if operator == "+" {
return first + second
} else if operator == "-" {
return first - second
} else if operator == "*" {
return first * second
} else {
return first / second
}
}
🎨 Python3
# https://www.acmicpc.net/problem/15815
import sys
def compute(operator, first, second):
if operator == "+":
return first + second
elif operator == "-":
return first - second
elif operator == "*":
return first * second
else:
return first // second
if __name__ == "__main__":
formulas = list(sys.stdin.readline().rstrip())
numbers = []
while len(formulas) > 0:
popped = formulas.pop(0)
if popped == "+" or popped == "-" or popped == "*" or popped == "/":
second = numbers.pop(-1)
first = numbers.pop(-1)
numbers.append(compute(popped, first, second))
else:
numbers.append(int(popped))
print(numbers[0])
728x90