문제
https://school.programmers.co.kr/learn/courses/30/lessons/120863
풀이
음...더 좋은 방법을 찾고싶다.
일단 "3x + 1" 이런식으로 연산기호 사이에 공백이 존재하니 공백을 기준으로 쪼개 배열을 만든다. => ["3x","+","1"]
3x 같이 일차항인 경우 x를 포함하고 있다면 ~ 으로 조건을 달아 일차항에 누적해준다.
그외는 isNaN의 반례, 즉 기호가 아닌 숫자가 오는 경우 상수항에 더해준다.
isNaN(+) => true
isNaN(7) => false
일차항, 상수항 둘다 있다면 ax + b 꼴로 반환, 일차항만 있다면 ax, 상수항만 있다면 b 해준다.
+++ 제출 케이스에서 틀렸던 부분인데, 일차항이 1인 경우 1x가 아니라 x로 1이 생략되게 출력해야 된다.
일차항이 1인지 확인하는 조건문 추가..
function solution(polynomial) {
let 상수항 = 0;
let 일차항 = 0;
polynomial.split(" ").forEach((term) => {
if (term.includes("x")) return (일차항 += parseInt(term.split("x")[0] || 1));
if (!isNaN(term)) return (상수항 += parseInt(term));
});
if (일차항 && 상수항) return 일차항 === 1? `x + ${상수항}` :`${일차항}x + ${상수항}`;
if (일차항) return 일차항 === 1? "x" :`${일차항}x`;
if (상수항) return `${상수항}`;
}
다른 풀이
공백 포함해서 연산기호를 기준으로 쪼갠다(더하기 밖에 없다는 조건이 있음)
=> ["x","1"] 이런식으로 일차항과 상수만 존재
x만 걸래낸 후 map으로 돌면서 3x => 3, x => 1 이런식으로 바꾸고 reduce로 누적해준다.
상수항은 숫자만 걸러내서 누적해준다.
일차항이 만약 1이라면 x만 넣고 값이 있다면 ax 형식으로 배열에 넣어준다.
그리고 최종 리턴 값으로 배열을 연산기호와 join해서 반환한다!
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(" + ");
}
'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글
프로그래머스, 자바스크립트) 코드 처리하기 (0) | 2024.04.03 |
---|---|
프로그래머스, 자바스크립트) OX퀴즈 (0) | 2024.03.22 |
프로그래머스, 자바스크립트) 특이한 정렬 (0) | 2024.03.18 |
프로그래머스, 자바스크립트) 배열 만들기 2 (0) | 2024.03.17 |
프로그래머스, 자바스크립트) 유한소수 판별하기 (0) | 2024.03.15 |