두 개의 input에는 복소수(complex number)가 string
으로 주어집니다.
복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다.
input으로 받은 두 수를 곱해서 반환하는 프로그램을 작성해주세요.
반환하는 표현도 복소수 형태의 string 이어야합니다.
복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요.
예제 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.
복소수라는 개념을 몰라도 충분히 해결할 수 있는 문제였던 것 같습니다.
우선 문제 분석을 하면, 인자로 받는 a, b는 다음과 같은 형식을 지닙니다.
(a+b) * (a-b) = a^2 - b^2
또는
(a-b) * (a+b) = a^2 - b^2
(a+b) * (a+b) = a^2 + 2ab +b^2
어디서 많이 본 공식인 것 같습니다.
여기에 허수 i
를 더해주기만 하면 될 것 같습니다.
+
연산자를 기준으로 정수부분과 허수부분을 나눕니다. i
를 더해 값을 반환합니다. def complex_number_multiply(a, b):
new_a = a[:-1].split("+")
new_b = b[:-1].split("+")
a1 = int(new_a[0])
a2 = int(new_a[1])
b1 = int(new_b[0])
b2 = int(new_b[1])
result_int = (a1 * b1) - (a2 * b2)
result_int_i = (a1 * b2) + (a2 * b1)
return f"""{result_int}+{result_int_i}i"""
메서드를 사용하여 코드를 좀 더 줄여보겠습니다.
def complex_number_multiply(a, b):
a1, a2 = map(int, a[:-1].split("+")
b1, b2 = map(int, b[:-1].split("+")
result_int = (a1 * b1) - (a2 * b2)
result_int_i = (a1 * b2) + (a2 * b1)
return f"""{result_int}+{result_int_i}i"""
스스로 생각해보진 못하였고 부트캠프 동기분이 고안해낸 코드입니다.
아래부분이 훨씬 이해하기 쉽고, 간결한 코드인 것 같습니다.