[코딩 테스트 연습 입문] 문자열 계산하기

2022. 12. 28. 14:04code/[프로그래머스] python

문제

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의 숫자와 연산자는 공백 하나로 구분되어 있습니다.

 

입출력 예

입출력 예 설명

입출력 예 #1

  • 3 + 4 = 7을 return 합니다.

 

✔풀이

def solution(my_string):
    answer = 0
    my_list= my_string.split()

    for num in range(0,len(my_list)-1,2):
        if my_list[num+1]=="+":
            answer= int(my_list[num]) + int(my_list[num+2])
        else:
            answer= int(my_list[num]) - int(my_list[num+2])
        my_list[num+2] = answer

    return answer

📝설명

수식으로 이루어진 문자열을 계산해야 하는데, 연산자를 구분해야 하고, 숫자도 구분해야 한다.

만약 무턱대고 인덱스 번호로 하면 24는 2와 4로 분류되기 때문에, split()를 사용하여 공백을 기준으로 나눈 숫자와 연산자를 my_list에 저장했다. 

for문을 통해 my_list의 값에서 숫자만 빼낼 수 있도록 반복범위를 (0,len(my_list)-1,2)로 설정한다.

여기서 len(my_list)-1을 finish로 정하는 이유는, 

for문안에서 my_list의 num번째는 숫자이고 num+2번째 역시도 숫자일 것이기 때문에 둘을 연산자(my_listdml n+1번째)로 계산할 생각이다. 

즉, 0 2 4 ..와 같이 0을 포함한 2의 배수가 모두 숫자이고, 홀수는 연산자라는 것이다.

만약 my_list가 ["3", "+", "2", "-", "4"]라면 len은 5이고, 반복 범위는 (0,4,2)이고, num으로 호출되는 것은 0번쨰와 2번째 뿐이다.

이렇게 호출된 num번쨰 인덱스는 num+1번째가 +와 - 중 어떤 것인지에 따라 경우를 나눈다.

만약 num+1번째가 +라면, answer에 num과 num2를 더하도록 하고, -면 빼도록한다.

그 후 다시 for문이 돌아가기 전에, 다음으로 호출될 num+2번째 인덱스에 answer값을 넣음으로써 계속해서 해당 값을 가지고 계산할 수 있도록 한다.

 

👑모범 답안

🔎eval함수란, 매개변로 받은 식을 문자열로 받아서 실행하는 것이다. 

즉, my_string처럼 문자열의 형태를 띄지만 수식일 경우에, 해당 수식을 계산하여 결과를 도출한다는 것이다.

 

👀느낀 점

: 정말 생각보다 단순한 풀이가 있었다.

파이썬의 함수는 정말 어디까지인걸까......싶다.