프로그래머스, 자바스크립트) 다항식 더하기
문제
https://school.programmers.co.kr/learn/courses/30/lessons/120863
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
음...더 좋은 방법을 찾고싶다.
일단 "3x + 1" 이런식으로 연산기호 사이에 공백이 존재하니 공백을 기준으로 쪼개 배열을 만든다. => ["3x","+","1"]
3x 같이 일차항인 경우 x를 포함하고 있다면 ~ 으로 조건을 달아 일차항에 누적해준다.
그외는 isNaN의 반례, 즉 기호가 아닌 숫자가 오는 경우 상수항에 더해준다.
isNaN(+) => true
isNaN(7) => false
일차항, 상수항 둘다 있다면 ax + b 꼴로 반환, 일차항만 있다면 ax, 상수항만 있다면 b 해준다.
+++ 제출 케이스에서 틀렸던 부분인데, 일차항이 1인 경우 1x가 아니라 x로 1이 생략되게 출력해야 된다.
일차항이 1인지 확인하는 조건문 추가..
function solution(polynomial) {
let 상수항 = 0;
let 일차항 = 0;
polynomial.split(" ").forEach((term) => {
if (term.includes("x")) return (일차항 += parseInt(term.split("x")[0] || 1));
if (!isNaN(term)) return (상수항 += parseInt(term));
});
if (일차항 && 상수항) return 일차항 === 1? `x + ${상수항}` :`${일차항}x + ${상수항}`;
if (일차항) return 일차항 === 1? "x" :`${일차항}x`;
if (상수항) return `${상수항}`;
}
다른 풀이
공백 포함해서 연산기호를 기준으로 쪼갠다(더하기 밖에 없다는 조건이 있음)
=> ["x","1"] 이런식으로 일차항과 상수만 존재
x만 걸래낸 후 map으로 돌면서 3x => 3, x => 1 이런식으로 바꾸고 reduce로 누적해준다.
상수항은 숫자만 걸러내서 누적해준다.
일차항이 만약 1이라면 x만 넣고 값이 있다면 ax 형식으로 배열에 넣어준다.
그리고 최종 리턴 값으로 배열을 연산기호와 join해서 반환한다!
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(" + ");
}