문제
한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial
이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.
(출처) https://school.programmers.co.kr/learn/courses/30/lessons/120863
제한사항
0 <
polynomial
에 있는 수 < 100polynomial
에 변수는 'x'만 존재합니다.polynomial
은 양의 정수, 공백, ‘x’, ‘+'로 이루어져 있습니다.항과 연산기호 사이에는 항상 공백이 존재합니다.
공백은 연속되지 않으며 시작이나 끝에는 공백이 없습니다.
하나의 항에서 변수가 숫자 앞에 오는 경우는 없습니다.
" + 3xx + + x7 + "와 같은 잘못된 입력은 주어지지 않습니다.
0으로 시작하는 수는 없습니다.
문자와 숫자 사이의 곱하기는 생략합니다.
polynomial
에는 일차 항과 상수항만 존재합니다.계수 1은 생략합니다.
결괏값에 상수항은 마지막에 둡니다.
0 <
polynomial
의 길이 < 50
입출력 예
polynomial | result |
"3x + 7 + x" | "4x + 7" |
"x + x + x" | "3x" |
ㅤ
풀이
- 제출 코드
function solution(polynomial) {
let a = 0;
let b = 0;
if(polynomial.split(" ").length === 1) return polynomial;
polynomial.split(" ").forEach(str => {
if(str.includes("x")) {
str[0] === "x" ? a++ : a += +str.slice(0, str.length - 1)
}
if(Number.isInteger(+str)) b += +str
})
if(!a) return b.toString();
if(!b) return a + "x";
if(a === 1) return "x" + " " + "+" + " " + b;
return a + "x" + " " + "+" + " " + b;
}
문제를 다 풀고 제출하기전에 마지막에 문자를 조합하는 조건식 부분을 고치고 싶었는데
그냥 일단 풀어서 내자! 하고 이렇게 코드를 제출했는데 문제 풀면서 처음으로 7점을 받았다. ^_^v
(아마 이 문제를 푼 사람이 많이 없어서 점수를 많이 준 듯 하다... ㅎㅎ)
ㅤ
- 리팩토링 🛠️
function solution(polynomial) {
let a = 0;
let b = 0;
polynomial.split(" ").forEach(str => {
if(str.includes("x")) {
const num = str[0] === "x" ? 1 : parseInt(str.replace("x", ""));
a += num;
} else if(!isNaN(str)) b += parseInt(str)
})
const aStr = a === 1 ? "x" : a > 1 ? `${a}x` : "";
const bStr = b ? `${b}` : "";
return [aStr, bStr].filter(Boolean).join(" + ");
}
x의 계수 구하기: 고친 방법이 조금 더 명확해 보여서 아래와 같이 고쳤다.
ㅤ
(처음 코드)
+str.slice(0, str.length - 1)
(고친 코드)parseInt(str.replace("x", ""))
ㅤ
- 문자열을 조합하는 조건문
const aStr = a === 1 ? "x" : a > 1 ? `${a}x` : "";
const bStr = b ? `${b}` : "";
return [aStr, bStr].filter(Boolean).join(" + ");
삼항연산자를 이용해
x
항은aStr
에 담고, 상수항은bStr
에 담는다.filter(Boolean)
:aStr
과bStr
중 빈 문자열을 제거한다.- 예를 들어,
aStr = "3x"
,bStr = ""
라면,[aStr, bStr]
은["3x", ""]
이 되고,.filter(Boolean)
을 적용하면 빈 문자열""
이 제거되어서["3x"]
만 남는다.
- 예를 들어,
.join(" + ")
: 남은 문자열들을" + "
로 연결해서 최종적으로 조합된 다항식을 반환한다.
ㅤ