TIL - CodeKata(11)
# 문제
두 개의 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 형태로 나와야 합니다.
# 나의 풀이
def complex_number_multiply(a, b):
complex_number_lst = []
for v in (a,b):
x = []
y = []
i = 0
while v[i] != '+':
x.append(v[i])
i += 1
i = i + 1
while v[i] != 'i':
y.append(v[i])
i += 1
complex_number = complex(int(''.join(x)), int(''.join(y)))
complex_number_lst.append(complex_number)
result = complex_number_lst[0] * complex_number_lst[1]
if not result.real:
answer = "0+{}i".format(int(result.imag))
else:
answer = "{}+{}i".format(int(result.real), int(result.imag))
return answer
# review
- 복소수 생성 함수
complex(숫자 인자1, 숫자 인자2)
에 대한 이해가 선행되어야 풀 수 있는 문제였다. - 그 외 복소수 연산 관련 함수에 대해서도 알게 됐다.
복소수 객체.real
: 복소수 객체의 실수 부분 숫자에 접근복소수 객체.imag
: 복소수 객체의 허수 부분부 숫자에 접근
# 예시
x = complex(3,2)
print(x) # 결괏값: (3+2j)
print(x.real) # 결괏값: 3.0
print(x.imag) # 결괏값: 2.0
-
string 형식(ex"1+3i")으로 주어진 인자값을
<class 'complex'>
의 복소수로 변환하는 작업이 문제 해결의 출발점이었다.-
while문
으로 문자열 자르기- 내가 선택한 방법이지만, while문을 두 번이나 사용해야 해서 효율성이 떨어진다.
-
split()
로 문자열 쪼개고,replace()
로 특정 문자열 제거- split():
문자열 객체.split('기준 문자열')
- split() 함수는 파라미터를 아무것도 주지 않을 경우 공백으로 문자를 나누게 된다.
- replace():
문자열 객체.replace('찾을 값', '바꿀 값')
- 원본 객체를 바꾸는 것이 아니라, 새로운 객체를 생성한다.
- split():
-
# 다른 풀이
def complex_number_multiply(a, b):
complex_number_lst = []
for v in (a,b):
x = v.replace("i","")
x = x.split('+')
complex_number = complex(int(x[0]), int(x[1]))
complex_number_lst.append(complex_number)
result = complex_number_lst[0] * complex_number_lst[1]
if not result.real:
answer = "0+{}i".format(int(result.imag))
else:
answer = "{}+{}i".format(int(result.real), int(result.imag))
return answer
Author And Source
이 문제에 관하여(TIL - CodeKata(11)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fcfargo/TIL-CodeKata11저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)