[프로그래머스] 다항식 더하기

miin·2024년 3월 4일
0

Algorithm

목록 보기
14/14
post-thumbnail

문제설명

제한사항

입출력 예

입출력 예 설명

풀이

  1. '+' 포함 공백을 제거한다

  2. 'x' 가 포함된 인덱스 중 숫자가 포함됐으면 숫자 반환, 나머지는 1로 반환 (제한사항 중 '계수 1은 생략합니다')

  3. 'x' 가 포함된 인덱스를 모두 더함.

    • 2번의 길이가 0 이상이면 x가 존재한다는 의미로 x를 모두 더함. 그렇지 않다면 x가 존재하지 않는 의미로 0을 반환

    • 2번의 길이가 0 이상이면서 x를 모두 더한값이 1 이상이면 모두 더한값 반환. 그렇지 않다면 1은 생략하기 때문에 문자열 반환 ''(결과 'x')

  4. 상수를 필터링 함

  5. 상수 필터링의 값이 있으면 상수를 모두 더함. 그렇지 않다면 0을 반환

  6. 5번의 반환값이 0 이상이면 상수가 있다는 의미로 x와 상수를 최종 return

    • 5번의 반환값이 0 이상이고 x의 모두 더한값이 0이상 또는 '' 이면 x가 존재한다는 의미로 x와 +를 포함 리턴

    • 그렇지 않다면 x가 존재하지 않는다는 의미로 상수만 반환

  7. 5번의 반환값이 없다면 상수가 없다는 의미로 x만 반환

코드

function solution(polynomial) {  
 const param = polynomial.split(' + ')     
  
  //x 
  const findX = param
  .filter(e=> e.includes('x'))
  .map(e=> e.split('x')[0] ? Number(e.split('x')[0]) : 1)

  const addX = findX.length > 0 
  ? findX.reduce((acc,cur) => acc+cur) > 1 
  ? findX.reduce((acc,cur) => acc+cur) : ''
  : 0
  
  //상수
  const constant = param.filter(e => !e.includes('x'))
  const constArr = constant.length > 0 ? constant.reduce((acc,cur) => Number(acc) + Number(cur)) : 0
  
  if(constArr > 0 ){
   return addX > 0 || addX === ''? `${addX}x + ${constArr}` : `${constArr}`
  }
  
 return `${addX}x`  
}

console.log(solution("3 + x + 1"))

0개의 댓글