본문 바로가기
기초다지기/JS 코딩테스트

javaScript 다항식 더하기

by 김빵그 2023. 11. 17.

문제

한 개 이상의 항의 합으로 이루어진 다항식을 동류항끼리 계산해 리턴

나의 풀이 

function solution(polynomial) {
    const array = polynomial.split(' + ');
    let xnum = 0;
    let num = 0;
    let answer = "";

      for (let index = 0; index < array.length; index++) {
            const v = array[index];

            if (v.indexOf('x') > -1) {
                const number = Number(v.slice(0, v.length - 1));
                xnum += number ? number : 1;
            } else {
                num += Number(v);
            }

            if (index === array.length - 1) {
                if (xnum) {
                    answer = answer.concat(answer ? ` + ${xnum === 1 ? 'x' : `${xnum}x`}` : `${xnum === 1 ? 'x' : `${xnum}x`}`);
                }

                if (num) {
                    answer = answer.concat(answer ? ` + ${num}` : `${num}`);
                }
            }
        }


    return answer;
}
  • xnum과 num 두 변수는 각각 x를 포함한 개수와 x가 없는 계수 추적 하는 데 사용
  • array = +를 구분자로 사용해 배열로 나눔
  • answer : 최종 문자열을 저장할 빈 문자열 
  • for
    • indexOf를 사용하여 x를 포함하는지 확인 
      • x를 포함하면 숫자 계수를 추출 , 계수가 없으면 1로 가정한다 
    • x를 포함하지 않으면 전체 항을 숫자 계수로 추가한다
    • if
      • 배열의 마지막 항인 경우 최종 응답 문자열 구성 
      • x항을 최종 응답 문자열에 추가
      • 숫자항을 최종 응답 문자열 answer에 추가
    • concat : 매개 변수로 전달된 모든 문자열을 호출 문자열에 붙인 새로운 문자열을 반환한다
    • 푸는데 계속 오류나서 gpt 힘을 좀 빌림..
 

String.prototype.concat() - JavaScript | MDN

concat() 메서드는 매개변수로 전달된 모든 문자열을 호출 문자열에 붙인 새로운 문자열을 반환합니다.

developer.mozilla.org

다른 풀이

function solution(polynomial) {
    const arr = polynomial.split(" + ");
    const xNum = arr
                .filter(n => n.includes("x"))
                .map(n => n.replace('x', '') || '1')
                .reduce((acc, cur) => acc + parseInt(cur, 10), 0);
    const num = arr
                .filter(n => !isNaN(n))
                .reduce((acc, cur) => acc + parseInt(cur, 10), 0);

    let answer = [];
    if(xNum) answer.push(`${xNum === 1 ? "" : xNum}x`);
    if(num) answer.push(num);

    return answer.join(" + ");
}
  • arr : +를 구분자로 사용하여 배열
  • x를 포함하는 항들을 필터링 
    • x를 제거후 숫자로 변환하고 합산 (수가 없으면 1 ) 
  • num항들을 필터링하고 합산
  • answer 최종 배열 초기화 
  • xNum과 num이 있다면 추가후 join 연결
function solution(p) {
    var [x, c] = p.split('+').reduce(([a, b], s) => {
        if (s.includes('x')) {
            return [a + Number(s.trim().replace('x', '') || 1), b];
        }
        return [a, b + Number(s)];
    }, [0, 0]);

    if (!x && !c) return '0';
    if (!x) return c.toString();
    x = `${x == 1 ? '' : x}x`;
    if (!c) return x;
    return `${x} + ${c}`;
}
  • split("+") : + 구분자 사용 
  • ㄱeduce([a,b] ...) : 각 항에 대해 reduce 함수 사용하여 x를 포함하는 항과 아닌 항 구분 
    • x포함 : a 에 해당 항 계수 더하고 b는 유지
    • 숫자항 : a는 유지 b에 해당 항 값 더함