문제
한 개 이상의 항의 합으로 이루어진 다항식을 동류항끼리 계산해 리턴
나의 풀이
function solution(polynomial) {
const array = polynomial.split(' + ');
let xnum = 0;
let num = 0;
let answer = "";
for (let index = 0; index < array.length; index++) {
const v = array[index];
if (v.indexOf('x') > -1) {
const number = Number(v.slice(0, v.length - 1));
xnum += number ? number : 1;
} else {
num += Number(v);
}
if (index === array.length - 1) {
if (xnum) {
answer = answer.concat(answer ? ` + ${xnum === 1 ? 'x' : `${xnum}x`}` : `${xnum === 1 ? 'x' : `${xnum}x`}`);
}
if (num) {
answer = answer.concat(answer ? ` + ${num}` : `${num}`);
}
}
}
return answer;
}
- xnum과 num 두 변수는 각각 x를 포함한 개수와 x가 없는 계수 추적 하는 데 사용
- array = +를 구분자로 사용해 배열로 나눔
- answer : 최종 문자열을 저장할 빈 문자열
- for
- indexOf를 사용하여 x를 포함하는지 확인
- x를 포함하면 숫자 계수를 추출 , 계수가 없으면 1로 가정한다
- x를 포함하지 않으면 전체 항을 숫자 계수로 추가한다
- if
- 배열의 마지막 항인 경우 최종 응답 문자열 구성
- x항을 최종 응답 문자열에 추가
- 숫자항을 최종 응답 문자열 answer에 추가
- concat : 매개 변수로 전달된 모든 문자열을 호출 문자열에 붙인 새로운 문자열을 반환한다
- 푸는데 계속 오류나서 gpt 힘을 좀 빌림..
- indexOf를 사용하여 x를 포함하는지 확인
String.prototype.concat() - JavaScript | MDN
concat() 메서드는 매개변수로 전달된 모든 문자열을 호출 문자열에 붙인 새로운 문자열을 반환합니다.
developer.mozilla.org
다른 풀이
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(" + ");
}
- arr : +를 구분자로 사용하여 배열
- x를 포함하는 항들을 필터링
- x를 제거후 숫자로 변환하고 합산 (수가 없으면 1 )
- num항들을 필터링하고 합산
- answer 최종 배열 초기화
- xNum과 num이 있다면 추가후 join 연결
function solution(p) {
var [x, c] = p.split('+').reduce(([a, b], s) => {
if (s.includes('x')) {
return [a + Number(s.trim().replace('x', '') || 1), b];
}
return [a, b + Number(s)];
}, [0, 0]);
if (!x && !c) return '0';
if (!x) return c.toString();
x = `${x == 1 ? '' : x}x`;
if (!c) return x;
return `${x} + ${c}`;
}
- split("+") : + 구분자 사용
- ㄱeduce([a,b] ...) : 각 항에 대해 reduce 함수 사용하여 x를 포함하는 항과 아닌 항 구분
- x포함 : a 에 해당 항 계수 더하고 b는 유지
- 숫자항 : a는 유지 b에 해당 항 값 더함
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javaScript 배열 조각하기 (2) | 2023.11.21 |
---|---|
javaScript 매개변수 배열 중복에 따른 계산식 (1) | 2023.11.20 |
javaScript 문자열 중복에 따라 배열 만들기 (0) | 2023.11.16 |
javaScript 숫자단어 문자열을 숫자로 변경하기 (0) | 2023.11.15 |
javaScript n과 m으로만 이루어진 정수 배열 구하기 (1) | 2023.11.14 |