
https://school.programmers.co.kr/learn/courses/30/lessons/120863
function solution(polynomial) {
polynomial = polynomial.split(" ");
const variable = polynomial
.filter((v) => v.includes("x"))
.map((v) => v === "x" ? 1 : +v.slice(0, -1))
.reduce((a, c) => a + c, 0);
const constant = polynomial
.filter((v) => Number.isInteger(+v))
.reduce((a, c) => +c + a, 0);
return variable && constant
? `${variable === 1 ? '' : variable}x + ${constant}`
: variable ? `${variable === 1 ? '' : variable}x` : `${constant}`;
}
✔ 변수 배열과 상수항 배열을 따로 둔 후, 각각의 배열을 reduce를 통해 합을 도출
✔ 변수와 상수항이 둘 다 존재하는 경우 => 변수의 계수가 1인 경우, 1이 아닌 경우로 분류
✔ 둘 중 하나가 없는 경우 => 변수만 존재하는 경우, 상수항만 존재하는 경우로 분류
function solution(polynomial) {
polynomial = polynomial.split(" + ");
const variable = polynomial
.filter((v) => v.includes("x"))
.map(n => n.replace('x', '') || '1')
.reduce((a, c) => +c + a, 0);
const constant = polynomial
.filter((v) => Number.isInteger(+v))
.reduce((a, c) => +c + a, 0);
const answer = [];
if (variable) {
answer.push(`${variable === 1 ? "" : variable}x`);
}
if (constant) {
answer.push(constant);
}
return answer.join(" + ");
}
✔ 애초에 +만 존재하니, 아예 split(" + ")을 하는 것이 더 나은 방법인 것 같다.
✔ n.replace('x', '')를 통해 계수가 1인 경우를 판단 => 계수 1은 생략되기 때문에 variable 배열에 직접 1을 추가
✔ answer.join(" + ")을 하면 변수나 상수항 중 1개만 존재하는 경우 +가 join되지 않게 된다.