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