[Code Kata] 11. complex_number_multiply

그냥·2022년 6월 21일
0

CodeKata

목록 보기
10/18

문제

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


풀이

  1. 문제의 조건 정리
1) "a+bi" 혹은 "a+-bi" 형태의 인자를 받는다.
2) 스트링 형태로 반환해야 한다.
3) i의 제곱은 -1이다.

  1. 조건에 대한 코드 구현 방법 생각
1) +를 기준으로 문자를 나눈다.
2) i문자열이므로 곱할 수 없으니 처음에 빼고 생각하고 나중에 붙여준다.
3) i를 뺀 정수 부분의 곱으로 만들어진 숫자를 저장하고 i를 붙여 반환한다.

  1. 구현 코드
def complex_number_multiply(a, b):

    a_no_i = a[:-1]
    b_no_i = b[:-1]

    a1 = int(a_no_i.split('+')[0])
    a2 = int(a_no_i.split('+')[1])

    b1 = int(b_no_i.split('+')[0])
    b2 = int(b_no_i.split('+')[1])

    A1 = a1*b1-a2*b2
    B1 = a1*b2+a2*b1
  
    return f"{A1}+{B1}i"

  1. 코드 리뷰
1) 일일이 i를 제외하고, +를 기준으로 문자열을 나누고, int형으로 바꿔주는 방법말고 한 번에 할 수 있는 방법으로 하면 좋을 것 같다.

  1. 최고의 코드
def complex_number_multiply(a, b):
   
    a1,a2=map(int, a[:-1].split('+'))
    b1,b2=map(int, b[:-1].split('+'))
 
  	return "%d+%di" % (a1*b1-a2*b2,a1*b2+a2*b1)

0개의 댓글