WeCode Kata Day 11

luneah·2021년 12월 13일
0

WeCode Kata

목록 보기
11/20
post-thumbnail

문제

두 개의 input에 복소수(complex number)가 string 으로 주어집니다. 복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다.

input으로 받은 두 수를 곱해서 반환해주세요. 반환하는 표현도 복소수 형태의 string 이어야 합니다.

복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요.

(제곱 표현이 안 되어 i의 2제곱을 (i^2)라고 표현했습니다.)

예제 1
Input: "1+1i", "1+1i"
Output: "0+2i"

설명:
(1 + i) * (1 + i) = 1 + i + i + i^2 = 2i 
2i를 복소수 형태로 바꾸면 0+2i.


예제 2
Input: "1+-1i", "1+-1i"
Output: "0+-2i"

설명:
(1 - i) * (1 - i) = 1 - i - i + i^2 = -2i
-2i를 복소수 형태로 바꾸면 0+-2i.


예제 3
Input: "1+3i", "1+-2i"
Output: "7+1i"

설명: 
(1 + 3i) * (1 - 2i) = 1 - 2i + 3i -6(i^2) = 1 + i + 6 
7+i를 복소수 형태로 바꾸면 7+1i.

가정 ) input은 항상 a+bi 형태입니다. output도 a+bi 형태로 나와야 합니다.

Thinking Algorithm

// 복소수 계산 형태
(a+bi) * (c+di) = (ac + adi + bci -bd) = (ac - bd) + (ad + bc)i
  1. a와 b는 항상 c+di 형태이므로 i를 제외하고 숫자만 뽑아 나눠줌
  2. a와 b의 앞의 숫자와 뒤의 숫자를 각각 나눠서 계산
    2-1) 앞 숫자끼리 곱한 것 - 뒷 숫자끼리 곱한 것
    2-2) a의 앞숫자와 b의 뒷숫자 곱한것 + a의 뒷숫자와 b의 앞숫자 곱한것
  3. 2-1과 2-2를 더한 것을 string형으로 반환

Code

const complexNumberMultiply = (a, b) => {
  let arr1 = a.substring(0, a.length-1).split('+');
  let a1 = Number(arr1[0]);
  let a2 = Number(arr1[1]);

  let arr2 = b.substring(0, b.length-1).split('+');
  let b1 = Number(arr2[0]);
  let b2 = Number(arr2[1]);

  return `${a1 * b1 - a2 * b2}+${a1 * b2 + a2 * b1}i`
}
profile
하늘이의 개발 일기

0개의 댓글