➡️ 두 개의 수식을 입력받아, 두 수식의 계산 결과 중 더 큰 값을 출력한다.
eval()함수를 사용하면 간단하게 구현이 가능하지만... 난 몰라서 무식하게 직접 구현했더니 코드가 좀 많이 길어졌다ㅏ...
# 연산자와 숫자로 나눠주는 함수
def str_to_list (str) :
formula = []
while True:
for i in range(len(str)):
if str[i] in ['*', '+', '-']:
formula.append(int(str[:i]))
formula.append(str[i])
str = str[i+1:]
break
else:
formula.append(int(str))
break
return formula
# 계산한값을 리턴하는 함수
def calculate (formula):
# * 계산
while True:
for i in range(len(formula)):
if formula[i] == '*':
temp = formula[i-1] * formula[i+1]
formula = formula[:i-1] + [temp] + formula[i+2:]
break
else:
break
# +, - 계산
while True:
for i in range(len(formula)):
if formula[i] in ['+', '-']:
if formula[i] == '+':
temp = formula[i-1] + formula[i+1]
elif formula[i] == '-':
temp = formula[i-1] - formula[i+1]
formula = formula[:i-1] + [temp] + formula[i+2:]
break
else:
break
return formula[0]
A, B = input().split()
A = calculate(str_to_list(A))
B = calculate(str_to_list(B))
if A > B:
print(A)
else:
print(B)
우선 입력받은 문자열(수식)str
을 정수와 연산자로 분리된 리스트formula
로 바꿔준다.
ex) str = '10*3-10'
→ formula = [10, '*', 3, '-', 10]
먼저 곱하기 연산을 수행하고, 그 결과를 다시 리스트에 넣는다.
ex) [10, '*', 3, '-', 10]
→ [30, '-', 10]
더하기와 빼기 연산을 하고, 그 결과를 다시 리스트에 넣는다.
ex) [30, '-', 10]
→ [20]
최종적으로 리스트에는 연산의 결과만 남게된다. 이 결과를 출력한다.
def str_to_list(str): 1번과정에 해당
ex) 문자열 '10*3-10' 에서 연산자를 발견('*'
)하면 연산자의 앞 문자열(10
)을 정수로 바꾼 값과 연산자('*'
)를 formula
리스트에 순차적으로 삽입한다. 연산자의 뒤(str = '3-10'
)는 앞과 같은 과정 반복을 하여 리스트로 바꿔준다. 수식의 맨앞과 맨뒤는 무조건 정수이므로 이 과정을 반복하면, 마지막에는 정수하나만 남는다.(연산자의 앞과 연산자에대해서만 formula에 삽입했으므로) 마지막 남은 정수를 formula
의 맨끝에 삽입한다.
def calculate (formula) : 2,3번 과정에 해당
연산자의 앞, 뒤 숫자에 대해 연산을 한 후, 그 결과값과 뒤의 수식을 합친다. formula = [10*3] + ['-', 10]
→ [30, '-', 10]
A, B = input().split()
A = eval(A)
B = eval(B)
if A > B:
print(A)
else:
print(B)
eval()함수를 사용하여 구현하였다.
eval() : 파이썬에서 문자열 형태로 표현된 파이썬 식(expression)을 실행하고, 그 결과값을 반환하는 함수이다.
expression = "2 + 3 * 4"
result = eval(expression)
print(result) # 출력: 14