[프로그래머스] 다항식 더하기.JS

ungnam·2023년 6월 5일

programmers level0

목록 보기
17/29
post-thumbnail

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되지 않게 된다.

profile
꾸준함을 잃지 말자.

0개의 댓글