[Algorithm] 3주차 1번 문제

김상웅·2022년 6월 20일
0

[알고리즘]

목록 보기
9/18

✅ 문제


두 개의 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를 더해주기만 하면 될 것 같습니다.

  1. 허수 부분을 떼어낸 새로운 문자열을 반환합니다.
  2. 새로운 문자열에서 + 연산자를 기준으로 정수부분과 허수부분을 나눕니다.
  3. 알맞은 연산값에 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"""

스스로 생각해보진 못하였고 부트캠프 동기분이 고안해낸 코드입니다.

아래부분이 훨씬 이해하기 쉽고, 간결한 코드인 것 같습니다.

profile
누구나 이해할 수 있도록

0개의 댓글