[Goorm][Py] 큰 수식 찾기

mj·2024년 6월 14일
0

코딩테스트문제

목록 보기
27/50
post-custom-banner

문제 바로가기


문제

➡️ 두 개의 수식을 입력받아, 두 수식의 계산 결과 중 더 큰 값을 출력한다.




나의 코드


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)

코드 풀이

  1. 우선 입력받은 문자열(수식)str을 정수와 연산자로 분리된 리스트formula로 바꿔준다.
    ex) str = '10*3-10'formula = [10, '*', 3, '-', 10]

  2. 먼저 곱하기 연산을 수행하고, 그 결과를 다시 리스트에 넣는다.
    ex) [10, '*', 3, '-', 10][30, '-', 10]

  3. 더하기와 빼기 연산을 하고, 그 결과를 다시 리스트에 넣는다.
    ex) [30, '-', 10][20]

  4. 최종적으로 리스트에는 연산의 결과만 남게된다. 이 결과를 출력한다.


  • 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
    
profile
일단 할 수 있는걸 하자.
post-custom-banner

0개의 댓글