숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s
가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.
1 ≤ s의 길이 ≤ 200
-1,000 < s의 원소 중 숫자 < 1,000
function solution(s) {
var lst = s.split(" ");
var sum = 0;
for (let i = 0; i < lst.length; i++) {
if (lst[i] != "Z") {
sum += Number(lst[i]);
} else {
sum -= Number(lst[i - 1]);
}
}
return sum;
}
console.log(solution("1 2 Z 3"));
function solution(s) {
const stack = [];
s.split(" ").forEach((target) => {
if (target === "Z") stack.pop();
else stack.push(+target);
});
// reduce : 배열의 각 요소에 대해 주어진 reducer 함수를 실행하고 하나의 결과값을 반환
// accumulator : 누산기
// currentValue : 현재 값
return stack.length ? stack.reduce((accumulator, currentValue) => accumulator + currentValue) : 0;
}
console.log(solution("1 2 Z 3"));
forEach
, reduce
메서드를 사용하여 더욱 간략하고 가독성있는 코드를 발견했다.+
연산자는 피연산자를 숫자로 변환하는 용도로 사용된다.+target
은 target
문자열을 숫자로 변환한 값이고stack.push(target)
을 하면 stack에 문자열이 추가되는 것을 의미한다. target
앞에 +
연산자를 붙여 숫자로 바꿔준다.