codekata #11 (week 3) Complex Number Multiplication

Junyoung Kim·2022년 2월 1일
0

algorithm

목록 보기
11/12

Leetcode #537 Complex Number Multiplication

문제

문제

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

나의 풀이

import re
def complex_number_multiply(a, b):
     list1 = re.findall("-?\d+",a)
     list2 = re.findall("-?\d+",b)
   
     x = int(list1[0])*int(list2[0])-int(list1[1])*int(list2[1])
     y = int(list1[0])*int(list2[1])+int(list1[1])*int(list2[0])

     return f"{x}+{y}i"
  • 정규식 패키지인 re import
  • a+bi 형식인 string a,b에서 숫자만 추출 (list1,list2)
  • 복소수 계산후 f 포매팅을 이용해서 복소수 형태로 다시 출력

정답은 맞췄으나 외부 패키지를 이용한다는 것이 찜찜해서 다시 생각해봤다
숫자만 추출하는 방법이 안떠올라서 저런 방식으로 생각했다.
생각해보니 그냥 문자열 슬라이싱 + split 메서드를 이용하면 되었다.

리팩토링

def complex_number_multiply(a, b):
  ra, ia = a[:-1].split("+")
  rb, ib = b[:-1].split("+")

  ra, ia , rb, ib = int(ra), int(ia), int(rb), int(ib)

  return f"{ra*rb - ia*ib}+{ra*ib + ia*rb}i"

0개의 댓글

관련 채용 정보