my_string
은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string
이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.
my_string
의 길이 ≤ 100my_string
을 계산한 결과값은 1 이상 100,000 이하입니다.my_string
의 중간 계산 값은 -100,000 이상 100,000 이하입니다.my_string
에는 연산자가 적어도 하나 포함되어 있습니다.my_string
의 숫자와 연산자는 공백 하나로 구분되어 있습니다.my_string | result |
---|---|
"3 + 4" | 7 |
입출력 예 #1
💡 문제풀이 과정
- 답안 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);
}