알고리즘/코드카타

Week3 - Day1 (Javascript)

시럽이 2022. 7. 19. 21:57

💬 오늘부터 팀 프로젝트가 시작되어 아침 일찍 코드카타를 진행했다. 

 

 

문제

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

 

예제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 형태로 나와야 합니다.

 

 

내 Flow

  1. 어차피 계산은 쪼개서 하기 때문에 설명대로 쪼갠다!
  2. '+'를 기준으로 쪼갠다.
  3. 복소수의 경우 i와 정수로 쪼갠다.
  4. i의 제곱은 -1므로 -1을 넣어 계산한다.

 

풀이

const complexNumberMultiply = (a, b) => {
  let aplus = a.indexOf(‘+’);
  let bplus = b.indexOf(‘+’);
  let preA = a.slice(0,aplus);
  let postA = a.slice(aplus+1,-1);
  let preB = b.slice(0,bplus);
  let postB = b.slice(bplus+1,-1);
  //실수
  let result1 = (preA * preB) + (-1) * (postA * postB);
  //허수
  let result2 = (preA * postB) + (postA * preB);
  let result = `${result1}+${result2}i`
  return result;
}

 

 

 

다른 사람 풀이

const complexNumberMultiply = (a, b) => {
  let x = a.split('+');
  let xInt = parseInt(x[1])
  let y = b.split('+');
  let yInt = parseInt(y[1])

  return ((x[0] * y[0])  + ((yInt * xInt) * -1)) + '+' + ((x[0] * yInt) + (xInt * y[0]) +'i')
}

 

 

 

참고

출처: https://kangdanne.tistory.com/131 [Hello, Dan:d World!:티스토리]

'알고리즘 > 코드카타' 카테고리의 다른 글

Week3 - Day4 (Javascript)  (0) 2022.07.23
Week2 - Day5 (Javascript)  (0) 2022.07.15
Week2 - Day4 (Javascript)  (0) 2022.07.15
Week2 - Day3 (Javascript)  (0) 2022.07.14
Week2 - Day2 (Javascript)  (0) 2022.07.14