210830 두 개의 복소수 곱하기

박은정·2021년 8월 30일
0

문제

두 개의 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"

설명: 2i를 복소수 형태로 바꾸면 0+2i

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

예제 2

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

설명: -2i를 복소수 형태로 바꾸면 0+-2i.

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

예제 3:

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

설명: 7+i를 복소수 형태로 바꾸면 7+1i.

(1 + 3i) * (1 - 2i) = 1 - 2i + 3i -6(i^2) = 1 + i + 6, 

가정

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

문제이해

complexNumberMultiply() 함수의 인자로 받는거는
문자열 "a+bi"

여기서 a, b를 가리키기 위해
"a1+a2i", "b1+b2i" 라고 표현하기로 한다
(여기서, a1, a2, b1, b2는 모두 정수)

복소수 계산하는 방법을 보면

a1*b1 + a1*b2*i + a2*b1*i + a2*b2*(-1)

이고 이 값을 문자열로 반환(=return)하면 된다

정답

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`
}

코드설명

  1. 복소수에서 실수부분, 허수부분을 나누기 위해 i앞까지의 문자열을 쪼갰다
a.substring(0, a.length-1) // a1+a2
a.substring(0, a.length-1).split('+') // [a1, a2]
  1. a1, a2, b1, b2 을 나타내는 변수 만들기
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])
  1. 복소수 계산한 값을 문자열 형태로 return하기
return `${a1*b1 - a2*b2}+${a1*b2 + a2*b1}i`
profile
새로운 것을 도전하고 노력한다

0개의 댓글