연산 우선순위가 같은 곱셈과 나눗셈 또는 덧셈과 뺄셈만 있는 식에서는 보통 왼쪽에서 오른쪽 순서로 연산을 한다. 하지만 이런 상황에도 연산 순서에 따라 아래와 같이 두 가지 다른 결과가 나올 수 있다.
(6 ÷ 2) × 3 = 9
6 ÷ (2 × 3) = 1
만약 곱셈, 나눗셈, 덧셈, 뺄셈의 4가지 연산자의 연산 우선순위가 동등하다고 할 때, 괄호 없는 식에서 서로 다른 연산 순서의 계산 결과를 구하여라.
- 입력
첫 번째 줄에는 "K1 O1 K2 O2 K3" 형태로 식이 주어진다. 정수 Ki (1 ≤ Ki ≤ 1,000)는 피연산자를, 문자열 Oi는 곱셈(*), 나눗셈(/), 덧셈(+), 뺄셈(-) 중 한 가지 연산자를 의미한다.
나눗셈 연산은 정수 나눗셈으로 몫만 취하며, 피연산자 중 하나가 음수이면 양수로 바꿔 계산한 결괏값에 음수를 취한다. 또한, 계산 과정에서 0으로 나누어야 하는 식은 주어지지 않는다.- 출력
주어진 식에서 서로 다른 연산 순서의 계산 결과가 작은 것을 첫 번째 줄에, 큰 것을 두 번째 줄에 출력한다.
곱셈, 나눗셈, 덧셈, 뺄셈의 4가지 연산자의 연산 우선순위가 동등
괄호의 위치에 따라 연산결과가 달라짐
"K1 O1 K2 O2 K3" 형태로 식이 주어진다
K1, K2, K3의 경우 숫자이므로 int형으로 형변환함
a, o_1, b, o_2, c = input().split()
k_1 = int(a)
k_2 = int(b)
k_3 = int(c)
# 피연산자들은 정수형으로 변환
# 이항연산하는 함수
def two_op_cal(op1, oper, op2):
if oper == "+":
return op1 + op2
elif oper == "-":
return op1 - op2
elif oper == "*":
return op1 * op2
elif oper == "/":
return int(op1 / op2)
# result1, result2 각각은 앞의 두개에 괄호를 친 경우, 뒤의 두개에 괄호를 친 경우
result1 = two_op_cal(two_op_cal(k_1, o_1, k_2), o_2, k_3)
result2 = two_op_cal(k_1, o_1, two_op_cal(k_2, o_2, k_3))
if (result1 < result2):
print(result1)
print(result2)
else:
print(result2)
print(result1)코드를 입력하세요
# 출처 - https://jinho-study.tistory.com/731
def f(a, b, op):
if op == '+':
return a+b
elif op == '-':
return a-b
elif op == '*':
return a*b
elif op == '/':
return -1*(abs(a)//abs(b)) if a*b < 0 else a//b
li = list(input().split())
li[0] = int(li[0]); li[2] = int(li[2]); li[4] = int(li[4])
a = f(f(li[0], li[2], li[1]), li[4], li[3])
b = f(li[0], f(li[2], li[4], li[3]), li[1])
print(min(a, b))
print(max(a, b))