20201019 CodeKata

ToastEggsToast·2020년 10월 19일
0

CodeKata

목록 보기
3/3

오늘의 문제

두 개의 input에 복소수(complex number)가 string 으로 주어집니다.
복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다.
input으로 받은 두 수를 곱해서 반환해주세요.
반환하는 표현도 복소수 형태의 string 이어야 합니다.
복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요.

문제 해석

곱셈 공식을 이용해 계산, 결과값을 리턴하라고 하는 문제였다.

첫 접근

(a,b),(c,d)가 주어졌을 때 곱셈공식을 이용해 하나하나 계산을 할까 고민하다가 그래도 다른 방식을 사용해보자 하고 2중 for문을 사용해보자고 생각했다

비효율적 접근이었다

const complexNumberMultiply = (a, b) => {
  const splittedNum1 = a.split("+");
  const splittedNum2 = b.split("+");
  console.log(splittedNum1,splittedNum2)
  const resultArr = [];
  
  for(num1 of splittedNum1){
    for(num2 of splittedNum2){
      if(num1.includes("i") && num2.includes("i")){
        const powedI = num1.split("i")[0]*num2.split("i")[0];
        resultArr[3] = -powedI;
        break;
      }
      if(!num1.includes("i")&&!num2.includes("i")){
        resultArr[0] = num1*num2;
        break;
      }
      if(num1.includes("i") || num2.includes("i")){
        console.log(num1.split("i")[0]*num2.split("i")[0])
      }
    }
  }
  return resultArr;
}

풀다가 말아서 중간 자리수는 리턴이 안 되는 배열이 완성되었다.
하다보니 너무 복잡해지기도 하고 예외처리도 많이 해야하는 경우의 수가 생겨서 그냥 처음 생각했던대로 해보자고 결론내렸다. 주말에는 꼭 2중 포문으로 만드는 complexNumberMultiply를 완성시키리라 다짐.

다시 원점으로

처음에 생각했던대로 곱셈 공식을 이용해서 배열에 집어넣고, 그 배열에 join을 사용해 리턴시켜주었다.

다만, split을 시킬 때 +를 기준으로 해서 앞뒤를 나눠주고, 뒷자리 숫자들의 i를 replace를 통해 없애버려서 숫자만 남을 수 있게 해주었다.

const complexNumberMultiply = (a, b) => {
  const num1 = a.split("+")[0];
  const num2 = a.split("+")[1].replace("i","");
  const num3 = b.split("+")[0];
  const num4 = b.split("+")[1].replace("i","");
  
  const resultArr = [(num1*num3-(num2*num4)),"+",(num1*num3+num2*num4),"i"];
  return resultArr.join("")
}

resultArr[0]에 -가 들어가는 이유는 허수 i가 제곱이 되면 -1이 되기 때문에 그러한 특성을 반영했다.

profile
개발하는 반숙계란 / 하고싶은 공부를 합니다. 목적은 흥미입니다.

0개의 댓글