728x90
문제
생각
function solution(my_string) {
var answer = my_string.split(' ')
var [x, y] = [Number(answer[0]), Number(answer[2])]
var operator = answer[1]
var result = operator === "+"? x + y : x - y
return result;
}
코드 실행에서는 정상적으로 작동하는데 제출하려니 테스트에서 실패한다.
어떤 분이 질문하기에 적어둔 글을 보니 2 +2 + 2 와 같이 연산자가 1개 이상일 수도 있다고 한다. 생각해보니 2+2 처럼 문자열이 된 수식이라고 해서 꼭 연산을 1번만 하라는 것은 아니긴 하다.
그래서 나는 1 + 2 + 3일 경우 +2, +3을 짝으로 보고, +일 경우 positive array, -일 경우 negative array에 모은 뒤 최종적으로 1 + postivie array - negative array를 하는 방식으로 접근했다.
해결
function solution(my_string) {
const answer = my_string.split(' ')
const data = {};
const positive = [];
const negative = [];
const firstNum = answer[0];
answer.shift()
while(answer.length) {
if(answer[0] === "+") {
positive.push(answer[1]);
} else {
negative.push(answer[1]);
}
answer.shift();
answer.shift();
}
sumPositive = positive.reduce((a, b) => Number(a) + Number(b), firstNum)
sumNegative = negative.reduce((a, b) => Number(a) + Number(b), 0)
return sumPositive - sumNegative;
}
console.log(solution("3 + 4 + 2 - 2"))
다른 사람의 풀이
var solution=eval |
solution에 eval 함수 자체를 대입시켜 풀이했다. eval(input)이 되는 것이다. eval함수는 스트링으로 된 수식을 연산한 값을 리턴하는데, MDN에 따르면 현재 보안상 문제로 사용하지 않을 것을 경고한다.
회고
항상 함수 자체를 만들어야한다는 생각 대신 함수 그 자체를 대체할 수 있는 메소드가 있는지 생각해보면 좋을 것 같다.
레퍼런스
728x90
'Research > problems' 카테고리의 다른 글
프로그래머스_lv0_외계어사전 (0) | 2022.11.28 |
---|---|
프로그래머스_lv0_구슬을 나누는 경우의 수 (0) | 2022.11.26 |
LeetCode_283_Move Zeros (0) | 2022.11.24 |
프로그래머스_lv0_영어가 싫어요 (0) | 2022.11.22 |
프로그래머스_lv0_숨어있는 숫자의 덧셈(2) (0) | 2022.11.21 |
댓글