Code Kata_complexNumberMultiply

dabin *.◟(ˊᗨˋ)◞.*·2021년 9월 13일
0

CodeKata

목록 보기
8/9
post-thumbnail

해냈다,,,🥺

문제

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

풀이

const complexNumberMultiply = (a, b) => {
  let strA = a.slice(0, -1);
  let strB = b.slice(0, -1);
  
  let arr = strA.split('+').concat(strB.split('+'))
  let arr2 = arr.map(x => parseInt(x))
  
  let answer;
  answer = ((arr2[0] * arr2[2]) - (arr[1] * arr[3])).toString();
  answer += '+'
  answer += (arr[0] * arr[3] + arr2[1] * arr2[2]).toString();
  answer += 'i'

  return answer;
}

'복소수'라고 표현했지만, 복소수의 개념을 생각하지 않아도 접근할 수 있는 문제다. a와 b를 곱한 형태이고, i^2는 -1이라는 것만 생각했다.

  1. i & i^2는 잠시 뒤에 생각하기로 한다. a와 b 문자열에서 i를 삭제한다. 이제 a와 b는 num + num 형태만 남은 상태다.
  2. +를 기준으로 split하여 a와 b를 한 배열에 담는다. 이제 arr의 형태는 [num, num, num, num]이 된다. 모두 숫자로 바꾼다. 음수/양수도 구분되어 있다.
  3. (a + bi) * (c + di)는 ac + adi + bci + bdi^2과 같다. i^2은 -1이니 이를 반영하면 ac + adi + bci - bd다. 숫자는 숫자끼리, i포함된 숫자는 i포함된 것 끼리 묶는다. string으로 반환해야하니 '+'와 'i'를 추가해주고 string인 answer을 반환한다.
profile
모르는것투성이

0개의 댓글