Code Kata #11 복소수 연산하기

Somi·2021년 7월 5일
0

CODE KATA

목록 보기
11/12
post-thumbnail

💁 문제분석

두 개의 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"
Input: "1+1i", "1+1i"
Output: "0+2i"
설명:

(1 + i) (1 + i) = 1 + i + i + i^2 = 2i
(1 + i)
(1 + i) = 1 + i + i + i^2 = 2i
2i를 복소수 형태로 바꾸면 0+2i.

예제 2:
Input: "1+-1i", "1+-1i"
Output: "0+-2i"
copied!
Input: "1+-1i", "1+-1i"
Output: "0+-2i"
설명:

(1 - i) (1 - i) = 1 - i - i + i^2 = -2i,
(1 - i)
(1 - i) = 1 - i - i + i^2 = -2i,
-2i를 복소수 형태로 바꾸면 0+-2i.

예제 3:
Input: "1+3i", "1+-2i"
Output: "7+1i"
Input: "1+3i", "1+-2i"
Output: "7+1i"
설명:

(1 + 3i) (1 - 2i) = 1 - 2i + 3i -6(i^2) = 1 + i + 6,
(1 + 3i)
(1 - 2i) = 1 - 2i + 3i -6(i^2) = 1 + i + 6,
7+i를 복소수 형태로 바꾸면 7+1i.

처음에는 복소수라는 개념에 사로잡혀서 어떻게 접근해야할지 갈피를 못잡다가 구글링을 해보니 여기서 중요한건 그게 아니라는 것을 깨닫고 연산에만 집중해보았다.

🙈 나의 코드

const complexNumberMultiply = (a, b) => {
  // 여기에 코드를 작성해주세요.
  let arrA = a.slice(0,-1).split("+");
  let arrB = b.slice(0,-1).split("+");
  let arr = [...arrA, ...arrB]

...

먼저 인자로 들어오는 두 복소수의 연산을 편하게 하기 위해 배열로 쪼개준다. 모든 인자는 i와 +를 공통적으로 갖고있기 때문에 이를 기준으로 해준다. 첫째로 가장 마지막의 i를 slice로 빼주고, +를 기준으로 split을 해주어 배열에 숫자만 넣어준다. 그 후 두 배열을 스프레드 오퍼레이터로 합쳐준다.

...

  let calculatedArr = []
  calculatedArr.push((arr[0]*arr[2])+(arr[1]*arr[3]*-1))
  calculatedArr.push(arr[0]*arr[3] + arr[1]*arr[2])

  let result = `${calculatedArr[0]}+${calculatedArr[1]}i`
  return result
}

그렇게 하고나면 이제 초등학교때 배웠던 연산대로 계산을 해주면 된다. 첫째 셋째 수를 곱한 것과 둘째 넷째 수를 곱한것을 더해주고(이때 후자는 i의 제곱이 따라 붙으므로 -1을 곱해준다), 두번째 요소로는 첫째 넷째, 둘째 셋째 요소를 각각 곱한 것을 더해준다.

그리고 나서 백틱을 이용해서 문자열로 리턴해주면 끝!

0개의 댓글

관련 채용 정보