TIL67. CodeKata : 2개의 복소수 곱하여 반환하는 문제

ID짱재·2021년 11월 1일
1

CodeKata

목록 보기
9/18
post-thumbnail

🌈 2개의 복소수 곱하여 반환하는 문제


🤔 나의 Solution

두 개의 input에는 복소수(complex number)가 string 으로 주어집니다. 복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다. input으로 받은 두 수를 곱해서 반환해주세요. 반환하는 표현도 복소수 형태의 string 이어야 합니다. 복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요.

✔️ parameter로 "1+1i", "1+1i"이 전달되면, "0+2i"를 반환합니다.

✔️ parameter로 "1+-1i", "1+-1i"이 전달되면, "0+-2i"를 반환합니다.

✔️ parameter로 "1+3i", "1+-2i"이 전달되면, "7+1i"를 반환합니다.

def complex_number_multiply(a, b):
    a1, a2 = map(int, a[:-1].split('+'))
    b1, b2 = map(int, b[:-1].split('+'))
    return f"{a1 * b1 - a2 * b2}+{a1 * b2 + a2 * b1}i"
print(complex_number_multiply("1+3i", "1+-2i")) # 7+1i

✔️ a와 b로 전달된 string을 맨 뒤에 i를 제거한 상태로 +를 기준으로 split합니다.

✔️ 예를 들어, a가 "1+3i"고, b가 "1+-2i"라면, 이를 i를 제거한 채로 split한면 ['1', '3'], ['1', '-2']가 됩니다.

✔️ 현재 리스트 안에 string형태기 때문에 map을 통해 int형으로 캐스팅합니다.

✔️ 이렇게되면, a1=1, a2=3, b1=1, b2=-2이 됩니다.

✔️ 복소수 공식입니다. a1과 a1의 곱을 a2와 b2의 곱으로 뺀 값과, a1과 b2의 곱과 a2와 b1의 곱을 더한 값을 넣어주면 됩니다.

f"{a1 * b1 - a2 * b2}+{a1 * b2 + a2 * b1}i"

🤔 다른 해결 방법

def complex_number_multiply(a, b):
    num_list = list(map(int, ("".join(a.split("i"))).split("+") + ("".join(b.split("i"))).split("+")))
    print(num_list) # [1, 3, 1, -2]
    first = (num_list[0]*num_list[2]) - (num_list[1]*num_list[3])
    last = (num_list[0]*num_list[3]) + (num_list[1]*num_list[2])
    return f"{first}+{last}i"
print(complex_number_multiply("1+3i", "1+-2i")) # 7+1i
profile
Keep Going, Keep Coding!

0개의 댓글