이 문제의 경우 RegExp 메서드를 활용 해볼까 했지만 해볼 엄두가 안나서 고민을 좀 해봤는데, 제한사항을 보니 연산자는 +와 - 단 둘이고, 피연산자도 둘로 항상 일정한 패턴을 보인다는 점에서 문제를 풀었습니다.
즉 for문을 quiz의 길이만큼 돌리면서 quiz의 현재 i값(문자열)을 선택하여 split 메서드로 공백을 기준으로 쪼개어 반환을 하면 각각 피연산자와 연산자, 결과값이 나올 것입니다.
그럼 피연산자의 경우 Number 메서드로 형변환 하여 각각의 변수에 담아주고, 연산자를 담고 있는 문자열의 경우 일단 변수에 담은 후 각각의 연산을 수행하는 calc 함수를 하나 만듭니다.
calc 연산자에는 숫자형으로 변환된 피연산자 둘과, 연산자를 포함하고 있는 문자열을 매개변수로 받게 되는데, 이때 삼항연산자를 활용하여 매개변수의 값에 따라 피연산자들을 더하거나 빼주는 연산을 진행하고 결과값을 반환해 줍니다.
그 후 넘겨 받은 결과값과 처음 quiz의 배열에서 빼내어 Number로 변환했던 결과값을 비교하여 같을 경우에는 O, 틀릴 경우에는 X를 결과 배열(result)에 차례대로 push 한 후 for문이 끝나면 최종적으로 해당 배열을 반환합니다.
function solution(quiz) { // 연산을 수행하는 함수 function calc(num1, num2, op){ let result = 0; return result = op === "+" ? num1 + num2 : num1 - num2; } const result = []; // OX를 담을 배열 // for문을 실행하면서 quiz의 요소들을 split 한 후 각 변수에 할당 for(let i = 0 ; i < quiz.length ; i++){ let letterArray = quiz[i].split(" "); let operand1 = Number(letterArray[0]); let operand2 = Number(letterArray[2]); let operator = letterArray[1] let letterResult = Number(letterArray[4]);
let trueResult = calc(operand1, operand2, operator); // 피연산자들의 연산 결과를 해당 변수에 반환 받아 할당
result.push(trueResult === letterResult ? "O" : "X") // 삼항 연산자로 trueResult와 letterResult의 값을 비교하여 O 또는 X를 할당
}
return result; // 결과 반환
}