⭐ Lv. 0 - 다항식 더하기
한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial
이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.
0 < polynomial
에 있는 수 < 100
polynomial
에 변수는 'x'만 존재합니다.
polynomial
은 0부터 9까지의 정수, 공백, ‘x’, ‘+'로 이루어져 있습니다.
항과 연산기호 사이에는 항상 공백이 존재합니다.
공백은 연속되지 않으며 시작이나 끝에는 공백이 없습니다.
하나의 항에서 변수가 숫자 앞에 오는 경우는 없습니다.
" + 3xx + + x7 + "와 같은 잘못된 입력은 주어지지 않습니다.
"012x + 001"처럼 0을 제외하고는 0으로 시작하는 수는 없습니다.
문자와 숫자 사이의 곱하기는 생략합니다.
polynomial
에는 일차 항과 상수항만 존재합니다.
계수 1은 생략합니다.
결괏값에 상수항은 마지막에 둡니다.
0 < polynomial
의 길이 < 50
polynomial | result |
---|---|
"3x + 7 + x" | "4x + 7" |
"x + x + x" | "3x" |
입출력 예 #1
입출력 예 #2
우선 +
연산자만 존재하기 때문에 해당 문자열 (공백 + 공백
)을 기준으로 split
하였다.
이후에 각 문자열에 x
가 포함되었는지를 구분하여 각 계수를 계산하여 더해주고, 결과값을 return하였다.
function solution(polynomial) {
let terms = polynomial.split(" + ");
let result = [0, 0];
for(cur of terms) {
let xIndex = cur.indexOf('x');
if(xIndex === 0) result[0]++;
else if (xIndex !== -1) result[0] += Number(cur.slice(0, -1));
else result[1] += Number(cur);
}
if(result[0] === 0 && result[1] === 0) return "0";
else if(result[0] === 0) return String(result[1]);
else if(result[1] === 0) {
if(result[0] === 1) return "x";
else return `${result[0]}x`;
}
else {
if(result[0] === 1) return `x + ${result[1]}`;
else return `${result[0]}x + ${result[1]}`;
}
}
⭐ 항상 문제의 조건을 자세히 읽자.
하단의 조건에 따른 결과값 출력에 있어서 조금 헤매었다. 이번 문제의 경우 아래 조건을 꼭 확인해야 한다.
상단의 코드로도 문제를 해결할 수 있었으나, 불필요한 조건문을 삭제하고, 코드를 변형하여 결과값 출력을 아래와 같이 더 깔끔하게 수정하였다.
function solution(polynomial) {
let terms = polynomial.split(" + ");
let result = [0, 0];
for(cur of terms) {
let xIndex = cur.indexOf('x');
if(xIndex === 0) result[0]++;
else if (xIndex !== -1) result[0] += Number(cur.slice(0, -1));
else result[1] += Number(cur);
}
let answer = [];
if(result[0]) answer.push(`${result[0] === 1 ? '' : result[0]}x`);
if(result[1]) answer.push(String(result[1]));
return answer.join(" + ");
}