TIL _ Code Kata _ 복소수의 곱셈

❓문제

  • 복소수 두 개를 곱해서 반환하는 로직 구현
  • 인자로 주어지는 복소수는 'a+bi' 형태의 string이며, 반환되는 복소수도 'a+bi' 형태의 string
  • 예를 들어,
    '1+-1i'와 '1+-1i'를 각 인자로 받을 경우, 기대되는 반환값은 '0+-2i'
function complexNumberMultiply (x, y) { };


1. 해결 방안

  • 사고 과정

🔓 (문제 파악) 복소수 두 개를 곱해야 한다.
🔑 (해결 방안) 두 인자를 a+bi, c+di로 가정했을 때,

  1. 곱셈 법칙으로 두 복소수를 곱한다.
    (a+bi) * (c+di) = ac + adi + bci - bd

  2. 실수부와 허수부로 나누어 정리한다.
    ac + adi + bci - bd = (ac - bd) + (ad + bc)i





🔓 (문제 파악) string으로 주어진 복소수를 number형태로 변환하여 계산 해야한다.
🔑 (해결 방안) 실수부와 허수부를 구분하는 '+'와 'i'를 기준으로 문자열을 구분(slice메소드 활용)하여 숫자(Number메소드)로 변환한다.

// (a+bi) * (c+di) = (ac-bd)+(ad+bc)i
const complexNumberMultiply = (x, y) => {
  const a = Number(x.slice(0, x.indexOf('+')));
  const b = Number(x.slice(x.indexOf('+') + 1, x.indexOf('i')));
  const c = Number(y.slice(0, y.indexOf('+')));
  const d = Number(y.slice(y.indexOf('+') + 1, y.indexOf('i')));
}




🔓 (문제 파악) 두 복소수를 곱하고, 다시 string 으로 변환하여 반환해야 한다.
🔑 (해결 방안) 복소수 곱셈법칙에 따라 계산한 후 템플릿 리터럴을 활용하여 반환한다.

// (a+bi) * (c+di) = (ac-bd)+(ad+bc)i
const complexNumberMultiply = (x, y) => {
  const a = Number(x.slice(0, x.indexOf('+')));
  const b = Number(x.slice(x.indexOf('+') + 1, x.indexOf('i')));
  const c = Number(y.slice(0, y.indexOf('+')));
  const d = Number(y.slice(y.indexOf('+') + 1, y.indexOf('i')));
  
  const result = `${a*c - b*d}+${a*d + b*c}i`;
  
  return result;
}



2. 결과





"작성 내용 중 오류나 오타가 있다면, 댓글로 알려주시면 감사하겠습니다. 주니어 개발자에게 남겨주시는 작은 피드백이 큰 도움이 될 것 같습니다. 고맙습니다 :)"

좋은 웹페이지 즐겨찾기