한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial
이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.
polynomial
에 있는 수 < 100polynomial
에 변수는 'x'만 존재합니다.polynomial
은 양의 정수, 공백, ‘x’, ‘+'로 이루어져 있습니다.polynomial
에는 일차 항과 상수항만 존재합니다.polynomial
의 길이 < 50polynomial | result |
---|---|
"3x + 7 + x" | "4x + 7" |
"x + x + x" | "3x" |
${xNumber}x + ${constNumber}
function solution(polynomial) {
const polyArr = polynomial.split(' ')
const xNumber = polyArr
.map((v) =>
v.includes('x')
? v === 'x'
? Number(v.replace('x', '1'))
: Number(v.replace('x', ''))
: Number('')
)
.reduce((a, b) => a + b)
const constNumber = polyArr
.map((v) =>
!v.includes('x')
? !v.includes('+')
? Number(v)
: Number('')
: Number('')
)
.reduce((a, b) => a + b)
return constNumber === 0
? xNumber === 1
? `x`
: `${xNumber}x`
: xNumber === 0
? `${constNumber}`
: xNumber === 1
? `x + ${constNumber}`
: `${xNumber}x + ${constNumber}`
}
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(' + ')
}
이번에도 내가 직접 코드를 구현한 것과 구현하기 전에 설계한 것의 차이가 분명히 있다. 설계한 코드는 하나하나 console로 값을 확인하면서 할 수가 없기 때문에 아무래도 생각이 아주 자세하고 깊게까지는 못하게 되는 것 같다. 그래도 이렇게 계속 반복하다보면 설계하는 단계에서도 꽤나 좋은 코드를 생각할 수 있을거라 생각한다.
그리고 다른 사람 풀이도 보면 어딘가 나랑 비슷해 보이긴하지만, 좀 더 간결하다. 단축평가도 보이고 내가 단순하게 그냥 직관적으로 되는데로 문제를 풀었다면, 뭔가 좀 더 정돈되어 보인다.
오히려 1시간이라는 시간을 정해놓고 그 안에서 문제를 풀이하려고 해서 그런건지, 일단 정해진 시간안에 해결만 하면 그 다음에 리팩토링해볼 생각은 아예 안했던 것 같다. 앞으로는 아무리 못해도 10분정도는 더 투자해서 리팩토링까지 진행해보는 걸로 해보자!