[자바스크립트 알고리즘 ] 복소수 계산하기

이은진·2020년 12월 14일
0

알고리즘 공부

목록 보기
7/7

1. 문제

두 개의 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 형태로 나와야 합니다.

2. 풀이

complexNumberMultiply()는 복소수 인자 a, b를 받고, 각각 자릿수에서 연산을 해야 하기 때문에 먼저 a와 b를 연산하기 편한 형태로 한 배열에 넣어주었다.
a, b의 마지막 문자열은 항상 i로 끝나기 때문에 먼저 slice() 메서드를 활용해 i를 제거해 주고, '+'를 기준으로 나누어주었다. 그리고 array라는 배열에 두 배열을 스프레드 연산자를 활용하여 합쳐주었다.

  const splitedA = a.slice(0,-1).split("+")
  const splitedB = b.slice(0,-1).split("+")
  const array = [...splitedA, ...splitedB]
  console.log(array)
  // [ '1', '3', '1', '-2' ]

그리고 array 배열의 엘리먼트를 문제의 조건에 맞게 계산해주었다. i를 나중에 붙여야 하는 연산과 그렇지 않은 연산을 나누었다. result1은 결과값이 실수로 나오는 연산의 결과를, result2는 결과값에 'i' 문자열을 붙여야 하는 연산의 결과를 넣어 주었다.

  const result1 = +array[0]*array[2] + -(array[1]*array[3]) 
  const result2 = (array[0]*array[3] + array[1]*array[2]) + 'i' 

결과는 다음과 같다.

const complexNumberMultiply = (a, b) => {
  const splitedA = a.slice(0,-1).split("+")
  const splitedB = b.slice(0,-1).split("+")
  const array = [...splitedA, ...splitedB]
  
  const result1 = +array[0]*array[2] + -(array[1]*array[3]) 
  const result2 = (array[0]*array[3] + array[1]*array[2]) + 'i' 
  return result1 + '+' + result2
} 

complexNumberMultiply("1+3i", "1+-2i") // '7+1i'
profile
빵굽는 프론트엔드 개발자

0개의 댓글