문자열 계산하기(Javascript)

·2022년 10월 21일
2
post-thumbnail

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 합니다.

나의 풀이

function solution(my_string) {
    let arr = my_string.split(' ')
    let cal = arr[0] * 1;
    for(let i = 1; i< arr.length; i++){
        if(arr[i] === '+')
            cal += arr[i+1] * 1;
        else if(arr[i] === '-')
            cal -= arr[i+1] * 1;
        else
            continue;
    }
    return cal;
}

한 번에 계산하는 방법이 있을 것 같아 찾아보니 eval()이라는 함수가 있었다. 이것은 문자로 표현된 자바스크립트 구문을 실행하는 함수인데, MDN에 따르면 이 함수는 보안에 굉장히 취약하기 때문에 사용하는 것을 지양하라고 나와 있었다. 그래서 이 함수 대신 반복문을 사용하여 기호를 검사한 뒤 값을 리턴해 주었다.

참고

참고할 풀이

function solution(my_string) {
    return Function(`return ${my_string}`)()
}

자바스크립트 공식 문서를 참고해서 풀이를 만들어 보았다. eval 대신 새로운 function을 리턴해주는 것으로도 eval을 구현할 수 있다. 대신 리턴은 문자로, my_string은 변수로 만들어 주어야 제대로 동작한다.

profile
전 이것도 몰라요

0개의 댓글