[js] 간단한 식 계산하기

sookyoung.k·2024년 6월 18일
1
post-thumbnail

문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.

제한사항

  • 0 ≤ a, b ≤ 40,000
  • 0을 제외하고 a, b는 0으로 시작하지 않습니다.

나의 풀이

function solution(binomial) {
    let arr = binomial.split(' ');
    return arr.filter((v) => !isNaN(v)).map((v) => Number(v))
            .reduce((a, c) => {
                if(arr[1] === '+') return a += c;
                else if(arr[1] === '-') return a -= c;
                else return a *= c;
            })
}
  • 주어진 문자열을 공백을 제거한 후 배열에 담는다
  • filter() 메서드로 연산자를 제외한 배열을 걸러내 map() 메서드로 배열의 요소들을 숫자로 변환한다
  • reduce() 메서드를 사용해 연산을 진행한다

다른 풀이 1

const ops = {
  '+': (a, b) => a + b,
  '-': (a, b) => a - b,
  '*': (a, b) => a * b,
};

function solution(binomial) {
  const [a, op, b] = binomial.split(' ');
  return ops[op](+a, +b);
}
  • ops 객체에 기본 연산을 키와 값의 쌍으로 정의한다. 각 키에는 문자열로 된 연산자를 담고, 값은 해당 연산을 수행하는 화살표 함수를 담았다.
  • 문자열을 split(' ')을 통해서 공백을 기준으로 분리하여 배열로 나눈 후 구조분해 할당하여 담는다.
  • ops[op](+a, +b) → 해당 연산자를 키로 갖는 함수를 호출하고, 문자열을 숫자열로 변환하여 각 인자로 넣어주어 계산한다.

다른 풀이 2

function solution(binomial) {
    const [a,ex,b] = binomial.split(" ");    
    return (ex === "+")? +a+ +b : (ex === "-")? a - b : a*b
}
  • 구조분해할당 후 삼항연산자로 훨씬 간단하게... 풀었군... 배우자...
profile
영차영차 😎

0개의 댓글