[프로그래머스] Lv.0 문자열 계산하기 JavaScript

Janet·2023년 4월 10일
0

Algorithm

목록 보기
132/314

문제 설명

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

문제풀이

💡 문제풀이 과정

  • 답안 1번: let operator = ‘+’;를 변수로 담아주고, 주어진 문자열 my_string공백을 기준으로 분할한 배열에 for( … of) 반복문을 돌려준다. 반복문 내에서 조건문을 세우는데 배열의 해당 원소를 숫자 타입으로 변환 시 isNaN (숫자가 아니라면)라면 operator = 해당 원소가 된다. else 조건에서 다시 삼항 연산자로 나누어 조건문을 세워주는데, operator == “+”이면 answer += Number(해당 원소) 한다. 그 외의 경우는 answer -= Number(해당 원소)한다.
  • 답안 2번: 다른 사람의 풀이 중, 좀 더 직관적인 풀이가 있어 참고하였다. 원소가 ‘+’인 경우 1을 곱하고 ‘-’인 경우에는 -1을 곱하는 방식으로 풀이하였다. 연산 기호 대신 양수와 음수를 이용한 점이 좋았다.
  • 답안 3번: eval()함수는 String type으로 작성된 JavaScript 코드를 실행하는 함수라고 한다. MDN에서 eval()
  • 은 해킹에 취약한 코드로 사용 주의 경고문을 볼 수 있는데, 일단 문제 푸는 데 있어 이러한 함수가 있다는 것 정도는 알아두면 좋겠다. 아래 예제 참고 ⬇️
eval(string)
    
console.log(eval('2 + 2'));
// Expected output: 4
    
console.log(eval(new String('2 + 2')));
// Expected output: 2 + 2
    
console.log(eval('2 + 2') === eval('4'));
// Expected output: true
    
console.log(eval('2 + 2') === eval(new String('2 + 2')));
// Expected output: false
    
// 출처: MDN 

✅ 답안 #1

function solution(my_string) {
  let answer = 0;
  let operator = "+";

  for (let i of my_string.split(" ")) {
    if (isNaN(Number(i))) operator = i;
    else operator == "+" ? answer += Number(i) : answer -= Number(i);
  }

  return answer;
}

✅ 답안 #2

function solution(my_string) {
  const stack = [];
  let sign = 1;
  for (const ch of my_string.split(" ")) {
    if (ch === "+") {
      sign = 1;
    } else if (ch === "-") {
      sign = -1;
    } else {
      stack.push(ch * sign);
    }
  }
  return stack.reduce((a, b) => a + b, 0);
}

✅ 답안 #3

function solution(my_string) {
  return eval(my_string);
}
profile
😸

0개의 댓글