코드카타 Day11

정수진·2022년 1월 24일
0

코드카타

목록 보기
5/10

const complexNumberMultiply = (a, b) => {
  const as = a.split("+");
  const bs = b.split("+");
  
  const a_one = Number(as[0]);
  const b_one = Number(bs[0]);
  
  const a_two = Number(as[1].slice(0,-1));
  const b_two = Number(bs[1].slice(0,-1));
  
  const first = a_one * b_one - a_two * b_two;
  const second = a_one * b_two + a_two * b_one;
  
  return first + "+" + second + "i";
}

복소수를 계산하는 방법은
(a+bi) * (c+di) 에서 i가 있는것끼리와 없는것끼리 계산하기 때문에

ac + bd(i^2)과 a*di+ bi*c 이 된다. 
그리고 i^2 = -1이므로 앞부분은 사실상 a*c - b*d로 계산한다.

우선은 input 값에서 "+"를 기준으로 나눠준다.

또한, 원래는 수학에서 i를 유지한채 계산하지만 컴퓨터에서는 그게 안되기 때문에
i를 떼고 값을 변수에 담아 처리한다.

마지막에 first와 second는 각각 (ac - bd)와 (ad + bc)가 된다.
이제 second에 다시 i를 붙이고 이를 하나로 합쳐서 복소수 형태로 return해주면 우리가 원하는 값을 받을수 있다.


map을 배운뒤

  const arr = [a.slice(0,-1), b.slice(0,-1)];
  const [as,bs]= arr.map( x => x.split("+"));
  const result1 = Number(as[0]*bs[0] - as[1]*bs[1]);
  const result2 = Number(as[0]*bs[1] + as[1]*bs[0]);
  return result1 + "+" + result2 + "i";

로 해보니 훨씬 간결한 코드가 되었다.

0개의 댓글