복소수 계산

BG·2021년 6월 7일
0

ALGORITHM

목록 보기
6/7

문제

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

나의 풀이

a+bi의 형태니깐 계산식으로 풀면 a + ai + bi + (ab * -1)의 구조로 항상 나오기 때문에, 계산식으로 만든 다음 하나하나의 항을 리스트에 담아 리스트의 첫번째 요소와 리스트의 마지막 요소를 계산하고 리스트의 두번재 요소와 리스트의 세번째 요소를 계산해서 붙이면 될듯 하다.

  • 입력 되는 값에서 +-표현이 있으므로, -로 치환해 준다.
  • 연산자 기호를 기준으로 split하여 리스트에 담는다.
  • 리스트로 분리된 숫자를 2중 for으로 돌려 첫번째 리스트의 첫번째 요소와 두번째 리스트의 첫번째 요소, 두번째 요소.. 그리고 첫번째 리스트의 두번째 요소도 마찬 가지로 두번째 리스트의 첫번째 요소, 두번째 요소를 차례대로 곱하여 준다.
  • 곱하기를 할때 i가 붙어 있으면 오류가 나기때문에 i를 빈값으로 치환하여 계산한다.
  • 계산된 값들을 차례대로 리스트에 담아서 다시 첫번째와 마지막 요소를 계산하고, 두번째와 세번째 요소를 계산하여 차례대로 붙인다.
def fn_split(str):
  for i in range(len(str)):
    if str[i] in ['+', '-']:
      return [str[0:i], str[i:len(str)]]

def complex_number_multiply(a, b):
    # 여기에 코드를 작성해주세요.
    num_list1 = fn_split(a.replace('+-', '-'))
    num_list2 = fn_split(b.replace('+-', '-'))
    ret_list = []
    ret = ''

    for i in range(0, 2):
      for j in range(0, 2):
        num1 = int(num_list1[i].replace('i', ''))
        num2 = int(num_list2[j].replace('i', ''))
        calc_num = 0

        if num_list1[i][-1] == 'i' and num_list2[j][-1] == 'i':
          calc_num = (num1 * num2) * -1
        else:
          calc_num = num1 * num2
        
        ret_list.append(calc_num)

    ret += str(ret_list[0] + ret_list[3])
    ret += '+'
    ret += str(ret_list[1] + ret_list[2]) + 'i'

    return ret
profile
글쎄...?

0개의 댓글