'+' 포함 공백을 제거한다
'x' 가 포함된 인덱스 중 숫자가 포함됐으면 숫자 반환, 나머지는 1로 반환 (제한사항 중 '계수 1은 생략합니다')
'x' 가 포함된 인덱스를 모두 더함.
2번의 길이가 0 이상이면 x가 존재한다는 의미로 x를 모두 더함. 그렇지 않다면 x가 존재하지 않는 의미로 0을 반환
2번의 길이가 0 이상이면서 x를 모두 더한값이 1 이상이면 모두 더한값 반환. 그렇지 않다면 1은 생략하기 때문에 문자열 반환 ''(결과 'x')
상수를 필터링 함
상수 필터링의 값이 있으면 상수를 모두 더함. 그렇지 않다면 0을 반환
5번의 반환값이 0 이상이면 상수가 있다는 의미로 x와 상수를 최종 return
5번의 반환값이 0 이상이고 x의 모두 더한값이 0이상 또는 '' 이면 x가 존재한다는 의미로 x와 +를 포함 리턴
그렇지 않다면 x가 존재하지 않는다는 의미로 상수만 반환
5번의 반환값이 없다면 상수가 없다는 의미로 x만 반환
function solution(polynomial) {
const param = polynomial.split(' + ')
//x
const findX = param
.filter(e=> e.includes('x'))
.map(e=> e.split('x')[0] ? Number(e.split('x')[0]) : 1)
const addX = findX.length > 0
? findX.reduce((acc,cur) => acc+cur) > 1
? findX.reduce((acc,cur) => acc+cur) : ''
: 0
//상수
const constant = param.filter(e => !e.includes('x'))
const constArr = constant.length > 0 ? constant.reduce((acc,cur) => Number(acc) + Number(cur)) : 0
if(constArr > 0 ){
return addX > 0 || addX === ''? `${addX}x + ${constArr}` : `${constArr}`
}
return `${addX}x`
}
console.log(solution("3 + x + 1"))