def complexNumberMultiply(a, b):
complex_num = eval(a.replace("i", "j")) * eval(b.replace("i", "j"))
complex_list = []
complex_list.append(str(int(complex_num.real)))
complex_list.append(str(int(complex_num.imag))+"i")
if len(complex_list) < 2:
return "0" + complex_list[0] + complex_list[1]
else:
return complex_list[0] + "+" + complex_list[1]
()
로 감싸있어서, 스트링 타입으로 리턴하기 위해서는 ()
를 다시 replace 로 제거해줘야 했고, 2a 만 나왔을 경우 0을 다시 더해줘야 하는.. 코드가 계속해서 미궁속으로 빠져 생각을 달리했다.이 답 역시 꽤나 멀리 돌아온 코드라고 생각되며, 복소수 연산의 값을 편하게 얻고자 사용했던 eval() 함수가 오히려, 복잡한 연산을 만들어냈다고 생각된다.
그런데 또 이 때 아니면 언제 eval()을 사용해보나 싶어 사용하였는데, 어거지로 문제를 푼 것 같다는 생각이 든다.
def complexNumberMultiply(a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
firstArr = a[:-1].split('+')
a1 = int(firstArr[0])
a2 = int(firstArr[1])
secondArr = b[:-1].split('+')
b1 = int(secondArr[0])
b2 = int(secondArr[1])
return f'{a1 * b1 - a2 * b2}+{a1 * b2 + a2 * b1}i'
# 더 줄인 버전
def complexNumberMultiply2(a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
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)
이 얼마나 깔끔한 답인가..
솔찍히 아직 a1 b1 한 값에 a2 b2 를 빼줘야 하는지 이해를 못하겠다.
수학을 한창 잘했던 고등학생 때로 돌아간다면 이해할 수 있을까.