위코드 코드카타를 정리한 내용입니다.
두 개의 input 으로 복소수가 string 으로 주어지면, (복소수는 a+bi 형태의 실수와 허수로 구성) input 받은 두 수를 곱해서 반환하세요. 복소수 i의 제곱은 -1 입니다.
// input
"1+1i", "1+1i"
// output
"0+2i"
=> (1 + i) * (1 + i) = 1 + i + i + i^2 = 2i)
// input
"1+3i", "1+-2i"
// output
"7+1i"
=> (1 + 3i) * (1 - 2i) = 1 - 2i + 3i -6(i^2) = 1 + i + 6,
우선 복소수로 들어오는 인자의 값을 실수와 허수로 분리해서 배열에 넣어줍니다. 처음 시작부터 + 가 나오는 지점까지, + 이후부터 i 가 나오기 전까지 값을 indexOf 로 찾고, slice 로 자르고 Number 를 사용해 숫자형으로 변환합니다.
const complexNumberMultiply = (a, b) => {
let arrA = [];
let arrB = [];
arrA.push(Number(a.slice(0, a.indexOf('+'))))
arrA.push(Number(a.slice(a.indexOf('+')+1, a.indexOf('i'))))
arrB.push(Number(b.slice(0, b.indexOf('+'))))
arrB.push(Number(b.slice(b.indexOf('+')+1, b.indexOf('i'))))
}
위 코드로 "1+3i" 와 "2+4i"를 입력하면 [1, 3] 과 [2, 4] 를 가져옵니다. 이제 각 인자를 연산해서 더해주고 결과값을 반환하면 됩니다.
const complexNumberMultiply = (a, b) => {
let arrA=[]
let arrB=[]
arrA.push(Number(a.slice(0, a.indexOf('+'))))
arrA.push(Number(a.slice(a.indexOf('+')+1, a.indexOf('i'))))
arrB.push(Number(b.slice(0, b.indexOf('+'))))
arrB.push(Number(b.slice(b.indexOf('+')+1, b.indexOf('i'))))
const realNum = arrA[0]*arrB[0]+arrA[1]*arrB[1]*-1
const fakeNum = (arrA[0]*arrB[1]+arrA[1]*arrB[0])+'i'
return `${realNum}+${fakeNum}`
}
다른 풀이로, substring 메서드로 마지막 i 를 빼주고 + 기호를 기준으로 split을 해 실수와 허수를 분리한 후 각 값을 계산합니다.
const complexNumberMultiply = (a, b) => {
let firstArr = a.substring(0, a.length-1).split('+');
const a1 = Number(firstArr[0])
const a2 = Number(firstArr[1])
let secondArr = b.substring(0, b.length-1).split('+');
const b1 = Number(secondArr[0])
const b2 = Number(secondArr[1])
return `${a1 * b1 - a2 * b2}+${a1 * b2 + a2 * b1}i`
}