[ Code Kata ] 🀯 Python #11 μž…λ ₯받은 λ³΅μ†Œμˆ˜(a+bi ν˜•νƒœ), 두 수λ₯Ό κ³±ν•΄μ„œ λ°˜ν™˜ν•˜κΈ° / map( ) ν•¨μˆ˜

HaileeΒ·2020λ…„ 12μ›” 15일
0

[ Code Kata ]

λͺ©λ‘ 보기
17/28
post-thumbnail

문제

두 개의 inputμ—λŠ” λ³΅μ†Œμˆ˜(complex number)κ°€ string 으둜 μ£Όμ–΄μ§‘λ‹ˆλ‹€.
πŸ‘‰πŸ» λ³΅μ†Œμˆ˜ : a+bi 의 ν˜•νƒœλ‘œ, μ‹€μˆ˜μ™€ ν—ˆμˆ˜λ‘œ 이루어진 수

  • input으둜 받은 두 수λ₯Ό κ³±ν•΄μ„œ λ°˜ν™˜ν•΄μ£Όμ„Έμš”.
    : λ°˜ν™˜ν•˜λŠ” ν‘œν˜„λ„ λ³΅μ†Œμˆ˜ ν˜•νƒœμ˜ string 이어야 ν•©λ‹ˆλ‹€.
  • λ³΅μ†Œμˆ˜ μ •μ˜μ— μ˜ν•˜λ©΄ (i^2)λŠ” -1 μ΄λ―€λ‘œ (i^2) μΌλ•ŒλŠ” -1둜 κ³„μ‚°ν•΄μ£Όμ„Έμš”.
    : 제곱 ν‘œν˜„μ΄ μ•ˆ λ˜μ–΄ i의 2μ œκ³±μ„ (i^2)라고 ν‘œν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

  • κ°€μ •
    input은 항상 a+bi ν˜•νƒœμž…λ‹ˆλ‹€.
    output도 a+bi ν˜•νƒœλ‘œ λ‚˜μ™€μ•Ό ν•©λ‹ˆλ‹€.

예제 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.

Model Solution

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)

μ˜€λŠ˜λ„ 늘 그렇듯이, λ‚΄κ°€ λͺ¨λΈ μ†”λ£¨μ…˜μ„ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜λŠ”건 파이썬의 λ‚΄μž₯ν•¨μˆ˜μ— λŒ€ν•œ 이해가 λΆ€μ‘±ν•΄μ„œ!!!
파이썬 λ‚΄μž₯ν•¨μˆ˜ πŸ‘ˆπŸ» 파이썬의 λͺ¨λ“  λ‚΄μž₯ν•¨μˆ˜λ“€μ΄ μ •λ¦¬λ˜μ–΄μžˆλ‹€. 자주 ν™•μΈν•˜κ³  읡힐 것!

map( ) ν•¨μˆ˜

map(f, iterable)은 ν•¨μˆ˜(f)와 반볡 κ°€λŠ₯ν•œ(iterable) μžλ£Œν˜•μ„ μž…λ ₯으둜 λ°›λŠ”λ‹€.
map은 μž…λ ₯받은 μžλ£Œν˜•μ˜ 각 μš”μ†Œλ₯Ό ν•¨μˆ˜ fκ°€ μˆ˜ν–‰ν•œ κ²°κ³Όλ₯Ό λ¬Άμ–΄μ„œ λŒλ €μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€.

첫번째 μ˜ˆμ‹œ.
two_times ν•¨μˆ˜λŠ” 리슀트 μš”μ†Œλ₯Ό μž…λ ₯λ°›μ•„ 각 μš”μ†Œμ— 2λ₯Ό κ³±ν•œ 결과값을 λŒλ €μ€€λ‹€κ³  κ°€μ •ν•˜μž.

map( )ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ€ μ˜ˆμ œλŠ” λ‹€μŒκ³Ό κ°™λ‹€. πŸ‘‡πŸ»

# two_times.py
def two_times(numberList):
    result = [ ]
    for number in numberList:
        result.append(number*2)
    return result

result = two_times([1, 2, 3, 4])
print(result)

κ²°κ³Όκ°’ : [2, 4, 6, 8]

map( )ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œ μ˜ˆμ œλŠ” πŸ‘‡πŸ»

def two_times(x): 
     return x*2

list(map(two_times, [1, 2, 3, 4]))

κ²°κ³Όκ°’ : [2, 4, 6, 8]

리슀트의 첫 번째 μš”μ†ŒμΈ 1이 two_times ν•¨μˆ˜μ˜ μž…λ ₯κ°’μœΌλ‘œ λ“€μ–΄κ°€κ³  1 2의 과정을 κ±°μ³μ„œ 2κ°€ λœλ‹€.
λ‹€μŒμœΌλ‘œ 리슀트의 두 번째 μš”μ†ŒμΈ 2κ°€ 2
2 의 과정을 거쳐 4κ°€ λœλ‹€.
λ”°λΌμ„œ 결괏값 λ¦¬μŠ€νŠΈλŠ” 이제 [2, 4]κ°€ λœλ‹€. 총 4개의 μš”μ†Ÿκ°’μ΄ λͺ¨λ‘ μˆ˜ν–‰λ˜λ©΄ λ§ˆμ§€λ§‰μœΌλ‘œ [2, 4, 6, 8]을 λŒλ €μ€€λ‹€
(map의 κ²°κ³Όλ₯Ό 보여주기 μœ„ν•΄ listν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ 좜λ ₯함)

μ΄λŠ” lambdaλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³½ 같이 κ°„λž΅ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€. πŸ‘‡πŸ»

list(map(lambda a: a*2, [1, 2, 3, 4]))
profile
μ›Ή 개발 πŸ·πŸ˜ŽπŸ‘ŠπŸ»πŸ”₯

0개의 λŒ“κΈ€