문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.
0 ≤ a, b ≤ 40,000
0을 제외하고 a, b는 0으로 시작하지 않습니다.
binomial | result |
---|---|
"43 + 12" | 55 |
"0 - 7777" | -7777 |
"40000 * 40000" | 1600000000 |
입출력 예 설명
입출력 예 #1
예제 1번의 binomial은 "43 + 12"로 이 식을 계산한 결과인 43 + 12 = 55를 return 합니다.입출력 예 #2
예제 2번의 binomial은 "0 - 7777"로 이 식을 계산한 결과인 0 - 7777 = -7777을 return 합니다.입출력 예 #3
예제 3번의 binomial은 "40000 * 40000"으로 이 식을 계산한 결과인 40000 × 40000 = 1600000000을 return 합니다.
function solution(binomial) {
const [a, op, b] = binomial.split(' ');
if(op === '+') return Number(a) + Number(b);
if(op === '-') return Number(a) - Number(b);
if(op === '*') return Number(a) * Number(b);
}
해당 문제에서 주요 깊게 봐야하는건
구조가 동일하다는 점이다.
"43 + 12"
, "0 - 7777"
, "40000 * 40000"
문자열을 보면
숫자, 기호, 숫자라는 구성으로 이루어져 있다.
초반에 배열만 보고 배열 순환해야하나? 해서 시간 낭비를 했었다.
map, forEach, reduce 등으로 시도했으나 원하는 값을 반환하지 않았다.
다시 문제를 보고 문자열의 구조를 보니 금방 해결 할 수 있었다.
split메소드에서 ' '
띄어쓰기를 기준으로 배열을 만들고 이를 구조분해 할당했다.
op
가 어떤 기호인지에 따라 다른 값을 반환해서 간단하게 풀 수 있었다.
뭐든지 문제를 주의 깊게 보고 값의 규칙이 있는지 살펴보자
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);
}
기호에 따라 다르게 값을 적용한 객체를 만들어 준게 인상 깊었다.
또한 JavaScript라는 언어의 특징을 잘 파악하고 Number()
, parseInt()
가 아닌
+a
, +b
로 작성하 점도 인상 깊었다.
다음에 비슷한 문제가 있을 경우 적용해 봐야겠다.