CodeKata_week3

Lee, ChankyuΒ·2021λ…„ 11μ›” 7일
0
post-thumbnail
post-custom-banner

πŸ“ 문제1

두 개의 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):
    num_list = list(map(int, ("".join(a.split("i"))).split("+") + ("".join(b.split("i"))).split("+")))
    answer1 = (num_list[0]*num_list[2]) - (num_list[1]*num_list[3])
    answer2 = (num_list[0]*num_list[3]) + (num_list[1]*num_list[2])
    return f"{answer1}+{answer2}i" 
  • 이 λ¬Έμ œμ—μ„œμ˜ 핡심은 예제λ₯Ό 보면 μ•Œ 수 μžˆλ“―μ΄ "-1i"κ°€ inputλ λ•Œ "1-1i"κ°€ μ•„λ‹Œ "1+-1i"둜 input λœλ‹€λŠ” 점이닀. "i"λ₯Ό κΈ°μ€€μœΌλ‘œ splitν•˜κ³  joinν•˜μ—¬ "1+1" ν˜•νƒœλ‘œ λ§Œλ“€κ³  "+"λ₯Ό κΈ°μ€€μœΌλ‘œ splitν•˜μ—¬ 숫자λ₯Ό λΆ„λ¦¬ν•˜μ—¬ ν’€μ΄ν•˜μ˜€λ‹€.

πŸ“ 문제2

문자둜 κ΅¬μ„±λœ 배열을 input으둜 μ „λ‹¬ν•˜λ©΄, 문자λ₯Ό λ’€μ§‘μ–΄μ„œ return ν•΄μ£Όμ„Έμš”.

μƒˆλ‘œμš΄ 배열을 μ„ μ–Έν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€.
인자둜 받은 배열을 μˆ˜μ •ν•΄μ„œ λ§Œλ“€μ–΄μ£Όμ„Έμš”.

Input: ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]

Input: ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]

λ‚˜μ˜ 풀이

def reverse_string(s):
    return s[::-1]
  • 맀우 κ°„λ‹¨ν•œ λ¬Έμ œμ˜€λ‹€!

πŸ“ 문제3

μ–‘μˆ˜λ‘œ 이루어진 m x n κ·Έλ¦¬λ“œλ₯Ό 인자둜 λ“œλ¦½λ‹ˆλ‹€. 상단 μ™Όμͺ½μ—μ„œ μ‹œμž‘ν•˜μ—¬, ν•˜λ‹¨ 였λ₯Έμͺ½κΉŒμ§€ κ°€λŠ” 길의 μš”μ†Œλ₯Ό λ‹€ λ”ν–ˆμ„ λ•Œ,κ°€μž₯ μž‘μ€ 합을 μ°Ύμ•„μ„œ return ν•΄μ£Όμ„Έμš”.

ν•œ μ§€μ μ—μ„œ μš°μΈ‘μ΄λ‚˜ μ•„λž˜λ‘œλ§Œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.

Input: [ [1,3,1], [1,5,1], [4,2,1] ]

Output: 7

μ„€λͺ…: 1β†’3β†’1β†’1β†’1 의 합이 제일 μž‘μŒ

λ‚˜μ˜ 풀이

def min_path_sum(grid):
    width = len(grid[0])
    height = len(grid)

    for i in range(width-1):
        grid[0][i+1] += grid[0][i]

    for j in range(height-1):
        grid[j+1][0] += grid[j][0]

    for i in range(width-1):
        for j in range(height-1):
            grid[i+1][j+1] += min(grid[i][j+1], grid[i+1][j]) 

    return grid[-1][-1]

πŸ“ 문제4

주어진 숫자 λ°°μ—΄μ—μ„œ, 0을 λ°°μ—΄μ˜ λ§ˆμ§€λ§‰μͺ½μœΌλ‘œ μ΄λ™μ‹œμΌœμ£Όμ„Έμš”. μ›λž˜ 있던 숫자의 μˆœμ„œλŠ” 바꾸지 λ§μ•„μ£Όμ„Έμš”.

μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

λ‚˜μ˜ 풀이

def move_zeroes(nums):
    for i in nums:
        if i == 0:
            nums.append(nums.pop(nums.index(i)))
    return nums
  • forλ¬Έκ³Ό if문으둜 μš”μ†Œ 값이 0인 경우λ₯Ό μ°Ύμ•„μ„œ pop()ν•¨μˆ˜λ‘œ λ¦¬μŠ€νŠΈμ—μ„œ μ œμ™Έμ‹œν‚¨ ν›„ append()ν•¨μˆ˜λ‘œ 뒀에 μΆ”κ°€ν•˜μ—¬ μ€€λ‹€.

πŸ“ 문제5

μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜
μ˜€λŠ˜μ€ μž¬κ·€μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•œ λ¬Έμ œμž…λ‹ˆλ‹€. μž¬κ·€(recursion)λž€, μžμ‹ μ„ μ •μ˜ν•  λ•Œ 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” 방법을 λœ»ν•©λ‹ˆλ‹€. ν”„λ‘œκ·Έλž˜λ°μ˜ ν•¨μˆ˜μ •μ˜μ—μ„œ 많이 μ‚¬μš©λ©λ‹ˆλ‹€.

예)

def countdown(n):
print(n)
countdown(n-1)

countdown(10);
def countdown(n):
print(n)
countdown(n-1)

countdown(10);
countdown ν•¨μˆ˜λŠ” 받은 인자λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. 그런데 μœ„μ˜ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ©΄ 10μ—μ„œ μ‹œμž‘ν•΄μ„œ λ¬΄ν•œμœΌλ‘œ λ§ˆμ΄λ„ˆμŠ€ κ°’κΉŒμ§€ λ‚΄λ €κ°‘λ‹ˆλ‹€.

κ·Έλž˜μ„œ μž¬κ·€ν•¨μˆ˜λŠ” μ•„λž˜μ˜ μ ˆμ°¨κ°€ κΌ­ ν•„μš”ν•©λ‹ˆλ‹€. μ–Έμ œ λ©ˆμΆœκ²ƒμΈκ°€?

μœ„λ₯Ό κ³ λ €ν•΄ 0이 되면 더이상 μž¬κ·€λ₯Ό μ΄μ–΄λ‚˜κ°€μ§€ μ•Šλ„λ‘ μ’…λ£Œ 쑰건을 μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€.

def countdown(n):
print(n)

if (n == 0):
return None

countdown(n-1)

countdown(10);
def countdown(n):
print(n)

if (n == 0):
return None

countdown(n-1)

countdown(10);
μž¬κ·€μ˜ 이둠은 μœ„μ™€ 같이 μ•„μ£Ό κ°„λ‹¨ν•©λ‹ˆλ‹€. μž¬κ·€λ₯Ό 더 κ³΅λΆ€ν•˜κ³  싢은 뢄은 인터넷에 μž¬κ·€ 문제λ₯Ό μ°Ύμ•„ 더 풀어보셔도 μ’‹κ³ , μ•Œκ³ λ¦¬μ¦˜ μ±…μ—μ„œ μž¬κ·€ λΆ€λΆ„λ§Œ 더 μ½μœΌμ…”λ„ μ’‹μŠ΅λ‹ˆλ‹€.

문제
μž¬κ·€λ₯Ό μ‚¬μš©ν•˜μ—¬ νŒ©ν† λ¦¬μ–Ό(factorial)을 κ΅¬ν•˜λŠ” ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•΄μ£Όμ„Έμš”. νŒ©ν† λ¦¬μ–Όμ΄λž€ 1μ—μ„œλΆ€ν„° nκΉŒμ§€μ˜ μ •μˆ˜λ₯Ό λͺ¨λ‘ κ³±ν•œκ²ƒμ„ λ§ν•©λ‹ˆλ‹€.

1! = 1 2! = 1 2 5! = 1 2 3 4 * 5

λ‚˜μ˜ 풀이

def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n-1)
  • n이 1μ΄ν•˜μΌ κ²½μš°μ— 1을 return ν•˜λŠ” κ²ƒλ§Œ μ„€μ •ν•˜λ©΄ λœλ‹€.
profile
Backend Developer - "Growth itself contains the germ of happiness"
post-custom-banner

0개의 λŒ“κΈ€