Code Kata 11

sourmix·2022년 5월 28일
0

알고리즘

목록 보기
2/2
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"

설명:

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

 

예제 2:


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

설명:

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

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

 

예제 3:


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

설명:

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

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

 

가정


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

과정

  let x = a.split(“”);
  let y = b.split(“”);
  let real = (x[0]*x[2]) - (y[0]*y[2]);
  let imaginary = (x[0]*y[2]) + (x[2]*y[0]);
  let result1 = real.toString()
  let result2 = imaginary.toString() + “i”
  return result1 +++ result2

복소수가 무엇인지 잊었기에 정의부터 알아봤다. 문제를 자세히보니 주어진 정보 외에 필요한 것은 없었다. 복소수 곱셈 전개방식대로 정리한 후 split으로 배열로 만든 후 해당 인덱스끼리 곱하였는데 정답2번만 통과했다. 알고보니 자릿수가 10의 자리 이상을 넘어가면 인덱스 번호가 맞지 않았다.

다른 방식의 split이 필요했고 힌트를 조금 본 후 split은 구분자 기준으로 묶어서 배열로 만들어지는 것을 알았다. 그 후에는 해용님이 정리해주셨다.

결과

  let x = a.split(+);
  let y = x[1].split(“i”);
  let c = b.split(+);
  let d = c[1].split(“i”);
  let real = (x[0]*d[0]) - (c[0]*y[0]);
  let imaginary = (x[0]*d[0]) + (y[0]*c[0]);
  let result1 = real.toString()
  let result2 = imaginary.toString() + “i”
  return result1 +++ result2

0개의 댓글