[프로그래머스] 문자열 계산하기 (Python)

TK·2023년 9월 14일

문제 설명

my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.

제한사항

  • 연산자는 +, -만 존재합니다.
  • 문자열의 시작과 끝에는 공백이 없습니다.
  • 0으로 시작하는 숫자는 주어지지 않습니다.
  • 잘못된 수식은 주어지지 않습니다.
  • 5 ≤ my_string의 길이 ≤ 100
  • my_string을 계산한 결과값은 1 이상 100,000 이하입니다.
    • my_string의 중간 계산 값은 -100,000 이상 100,000 이하입니다.
    • 계산에 사용하는 숫자는 1 이상 20,000 이하인 자연수입니다.
    • my_string에는 연산자가 적어도 하나 포함되어 있습니다.
  • return type 은 정수형입니다.
  • my_string의 숫자와 연산자는 공백 하나로 구분되어 있습니다.

입출력 예

my_stringresult
"3 + 4"7

입출력 예 설명

  • 입출력 예 #1
    3 + 4 = 7을 return 합니다.

내가 푼 답 (런타임에러)

def solution(my_string):
    answer = 0
    for i in my_string:
        if i in ['+','-']:
            my_string = my_string.split(i)
            if i == '+':
                answer = int(my_string[0]) + int(my_string[1])
            else:
                answer = int(my_string[0]) - int(my_string[1])    
    return answer

내가 푼 답2 (런타임에러)

  • 다음과 같이 여러번의 계산도 가능하다는 걸 깨닫고 다시 작성해 본 코드
    • ex) "6 - 2 - 4"
from functools import reduce
def solution(my_string):
    if '+' in my_string:
        my_string = my_string.split('+')
        answer = sum(list(map(int,my_string)))
    if '-' in my_string:
        my_string = my_string.split('-')
        answer = reduce(lambda acc, cur: int(acc) - int(cur), my_string)
    return answer
  • 음.. 생각해 보니 +-가 혼합되어 사용될 수도 있다...
    • ex) "6 - 2 + 4"

정답 풀이1 (아.....eval)

  • 직전에 문제 풀면서 검색하다 본 함순데... 분명 뭔가 트릭이 있다 싶었다 ㅡㅡ 기운빠지네..^^
def solution(my_string):
    return eval(my_string)

eval()

eval은 ‘evaluate’, 즉 ‘평가한다는 뜻으로 입력으로 받은 ‘expression’을 해석해 단일값으로 반환한다.
이 함수를 간단하게 사용해보자.

# 1.
eval('1+2+3')
# 2.
name = "Parkito"
sentence = eval(name + ', what is your hobby?')
# 3.
eval('1 * 2 * 3 * 4 * 5')
# 출력
>> 6
>> 'Parkito, what is your hobby?'
>> 120

정답 풀이2

  • -+-로 바꾸고 +split 해버려서 음수로 만듦👍🏻
    • ex) 5 - 8 = 5 + (-8)
def solution(my_string):
    return sum(int(i) for i in my_string.replace(' - ', ' + -').split(' + '))
profile
쉬운게 좋은 FE개발자😺

0개의 댓글