두 개의 input에 복소수(complex number)가 string 으로 주어집니다.
복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다.
input으로 받은 두 수를 곱해서 반환해주세요.
반환하는 표현도 복소수 형태의 string 이어야 합니다.
복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요.
(제곱 표현이 안 되어 i의 2제곱을 (i^2)라고 표현했습니다.)
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.
input은 항상 a+bi 형태입니다.
output도 a+bi 형태로 나와야 합니다.
complexNumberMultiply()
는 복소수 인자 a, b를 받고, 각각 자릿수에서 연산을 해야 하기 때문에 먼저 a와 b를 연산하기 편한 형태로 한 배열에 넣어주었다.
a, b의 마지막 문자열은 항상 i로 끝나기 때문에 먼저 slice()
메서드를 활용해 i를 제거해 주고, '+'를 기준으로 나누어주었다. 그리고 array
라는 배열에 두 배열을 스프레드 연산자를 활용하여 합쳐주었다.
const splitedA = a.slice(0,-1).split("+")
const splitedB = b.slice(0,-1).split("+")
const array = [...splitedA, ...splitedB]
console.log(array)
// [ '1', '3', '1', '-2' ]
그리고 array 배열의 엘리먼트를 문제의 조건에 맞게 계산해주었다. i를 나중에 붙여야 하는 연산과 그렇지 않은 연산을 나누었다. result1
은 결과값이 실수로 나오는 연산의 결과를, result2
는 결과값에 'i' 문자열을 붙여야 하는 연산의 결과를 넣어 주었다.
const result1 = +array[0]*array[2] + -(array[1]*array[3])
const result2 = (array[0]*array[3] + array[1]*array[2]) + 'i'
결과는 다음과 같다.
const complexNumberMultiply = (a, b) => {
const splitedA = a.slice(0,-1).split("+")
const splitedB = b.slice(0,-1).split("+")
const array = [...splitedA, ...splitedB]
const result1 = +array[0]*array[2] + -(array[1]*array[3])
const result2 = (array[0]*array[3] + array[1]*array[2]) + 'i'
return result1 + '+' + result2
}
complexNumberMultiply("1+3i", "1+-2i") // '7+1i'