💬 오늘부터 팀 프로젝트가 시작되어 아침 일찍 코드카타를 진행했다.
문제
두 개의 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
- 어차피 계산은 쪼개서 하기 때문에 설명대로 쪼갠다!
- '+'를 기준으로 쪼갠다.
- 복소수의 경우 i와 정수로 쪼갠다.
- 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 |