복소수 곱하기, 자바스크립트

라용·2022년 9월 20일
0

위코드 - 스터디로그

목록 보기
50/100
post-custom-banner

위코드 코드카타를 정리한 내용입니다.

문제

두 개의 input 으로 복소수가 string 으로 주어지면, (복소수는 a+bi 형태의 실수와 허수로 구성) input 받은 두 수를 곱해서 반환하세요. 복소수 i의 제곱은 -1 입니다.

// input 
"1+1i", "1+1i"

// output
"0+2i"
=> (1 + i) * (1 + i) = 1 + i + i + i^2 = 2i) 

// input 
"1+3i", "1+-2i"

// output
"7+1i"
=> (1 + 3i) * (1 - 2i) = 1 - 2i + 3i -6(i^2) = 1 + i + 6,

풀이

우선 복소수로 들어오는 인자의 값을 실수와 허수로 분리해서 배열에 넣어줍니다. 처음 시작부터 + 가 나오는 지점까지, + 이후부터 i 가 나오기 전까지 값을 indexOf 로 찾고, slice 로 자르고 Number 를 사용해 숫자형으로 변환합니다.

const complexNumberMultiply = (a, b) => {
	let arrA = [];
	let arrB = [];
	
	arrA.push(Number(a.slice(0, a.indexOf('+'))))
	arrA.push(Number(a.slice(a.indexOf('+')+1, a.indexOf('i'))))
	arrB.push(Number(b.slice(0, b.indexOf('+'))))
	arrB.push(Number(b.slice(b.indexOf('+')+1, b.indexOf('i'))))
}

위 코드로 "1+3i" 와 "2+4i"를 입력하면 [1, 3] 과 [2, 4] 를 가져옵니다. 이제 각 인자를 연산해서 더해주고 결과값을 반환하면 됩니다.

const complexNumberMultiply = (a, b) => {
	let arrA=[]
	let arrB=[]
	  
	arrA.push(Number(a.slice(0, a.indexOf('+'))))
	arrA.push(Number(a.slice(a.indexOf('+')+1, a.indexOf('i'))))
	arrB.push(Number(b.slice(0, b.indexOf('+'))))
	arrB.push(Number(b.slice(b.indexOf('+')+1, b.indexOf('i'))))
	  
	const realNum = arrA[0]*arrB[0]+arrA[1]*arrB[1]*-1
	const fakeNum = (arrA[0]*arrB[1]+arrA[1]*arrB[0])+'i'
	  
	return `${realNum}+${fakeNum}`
}

다른 풀이로, substring 메서드로 마지막 i 를 빼주고 + 기호를 기준으로 split을 해 실수와 허수를 분리한 후 각 값을 계산합니다.

const complexNumberMultiply = (a, b) => {
  let firstArr = a.substring(0, a.length-1).split('+');
  const a1 = Number(firstArr[0])
  const a2 = Number(firstArr[1])

  let secondArr = b.substring(0, b.length-1).split('+');
  const b1 = Number(secondArr[0])
  const b2 = Number(secondArr[1])

  return `${a1 * b1 - a2 * b2}+${a1 * b2 + a2 * b1}i`
}
profile
Today I Learned
post-custom-banner

0개의 댓글