D.evelop [CS]/Algorithm

[Algorithm 013] JS - complexNumberMultiply

Danne 2021. 10. 6. 10:01

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

input으로 받은 두 수를 곱해서 반환해주세요.

  • 반환하는 표현도 복소수 형태의 string 이어야 합니다.
  • 복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요.
  • (제곱 표현이 안 되어 i의 2제곱을 (i^2)라고 표현했습니다.)
  • input은 항상 a+bi 형태입니다. output도 a+bi 형태로 나와야 합니다.

예)

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

(1 + i) * (1 + i) = 1 + i + i + i^2 = 2i 

2i를 복소수 형태로 바꾸면 0+2i.
Input: "1+-1i", "1+-1i"
Output: "0+-2i"

(1 - i) * (1 - i) = 1 - i - i + i^2 = -2i

-2i를 복소수 형태로 바꾸면 0+-2i.
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.

 

 

A. 답

const complexNumberMultiply = (a, b) => {

  let x = a.split('+');
  let xInt = parseInt(x[1])
  let y = b.split('+');
  let yInt = parseInt(y[1])

  return ((x[0] * y[0])  + ((yInt * xInt) * -1)) + '+' + ((x[0] * yInt) + (xInt * y[0]) +'i')
}

complexNumberMultiply("1+3i", "1+-2i")    // '7+1i'
complexNumberMultiply("1+1i", "1+1i")     // '0+2i'

 

  • Input으로 받는 값(예: "1+-1i", "1+-2i")의 구조를 분리해 패턴을 값을 구해갔다.
정수 + 정수i

 

 

✔️ 해석 (return을 풀어 쓴다면)

input : "1+3i", "1+-2i"

계산과정)
1 + -2i + 3i -6i^2 
1 + -2i + 3i + 6
7 + 1i
const complexNumberMultiply = (a, b) => {
  
  // "1+3i"
  // +를 기준으로 나눠 배열x로 만듦
  let x = a.split('+');
  // 베열 x의 두 번째 값 '3i'의 정수만 담은 xInt변수 선언
  // parseInt()메서드를 사용해
  let xInt = parseInt(x[1])
  
  let y = b.split('+');
  let yInt = parseInt(y[1])
  
  // A : 1 (결과값 정수)
  // B : -2i + 3i (결과값 '정수+i')
  // c: -6i^2 = -6 * -1 = 7 (결과값 정수) : 마지막 항은 무조건 i^2임으로 -1로 값을 대체한다.
  // A + C + B
  
  let sum1 = (x[0] * y[0]) 
  let sum2 = (x[0] * yInt) + (xInt * y[0]) +'i'
  let sum3 = (yInt * xInt) * -1
 
  return (sum1 + sum3) + '+' + sum2
}

complexNumberMultiply("1+3i", "1+-2i")    // '7+1i'
                      
// 1 + -2i + 3i -6i^2 
// 1 + -2i + 3i + 6
// 7 + 1i

반응형