두 개의 input에 복소수(complex number)가 string 으로 주어진다. 복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수이다.
input으로 받은 두 수를 곱해서 반환해야 한다. 반환하는 표현도 복소수 형태의 string 이어야 한다.
복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산한다.
(제곱 표현이 안 되어 i의 2제곱을 (i^2)라고 표현했다.)
input은 항상 a+bi 형태이다. output도 a+bi 형태로 나와야 한다.
const complexNumberMultiply = (a, b) => {
let firstArr = a.substring(0, a.length-1).split('+');
const a1 = Number(firstArr[0])
const a2 = Number(firstArr[1])
console.log(a1, a2)
let secondArr = b.substring(0, b.length-1).split('+');
const b1 = Number(secondArr[0])
const b2 = Number(secondArr[1])
console.log(b1, b2)
return `${a1 * b1 - a2 * b2}+${a1 * b2 + a2 * b1}i`
}
console.log(complexNumberMultiply("1+1i", "1+1i")) // 예제
복소수라는 개념을 정말 오랜만에 접하는 것이라 구글에서 복소수의 개념과 풀이 예제를 찾아보았다. 기억 속에 흐릿하게 있었던 개념을 다시 짚어보게 되었다. 스스로 작성하진 못하더라도 다른 분이 작성하신 코드를 한 줄씩 이해해보았다.
complexNumberMultiply
이라는 함수에 a와 b 라는 인자가 들어오며 그 인자는 각각 a+bi
라는 복소수 형태를 가지고 있다.
firstArr
라는 변수를 선언하고 그 변수에는 string 형태의 복소수 a의 i를 제외한 1+1
을 구하는 substring
메서드와 그 값에서 +
를 제외한 배열값인 ['1','1']
을 구한다.
a1
은 우리가 구한 firstArr
변수의 0번째 인덱스 값이며 그것을 Number
메서드를 통하여 숫자로 변환시켜준다. a2
는 우리가 구한 firstArr
변수의 1번째 인덱스 값이며 역시 Number
메서드를 통하여 숫자로 변환시켜준다.
인자 b에 대한 것도 2번과 3번 과정처럼 반복해준다.
마지막 리턴 시에는 a1 * b1
값인 1
에서 a2 * b2
값인 -i^2
빼주면 0이 되고 a1 * b2
값인 1
와 a2 * b1
값인 1
를 더하여 2
를 해준 상태에서 i를 붙여주면 2i
라는 값이 나오는데 이를 복소수 형태로 바꾸면 0+2i
가 된다.