[๐Ÿค”Code Kata] 3week-1,2,3

์—ฌ์ฃผ๋งยท2020๋…„ 12์›” 26์ผ
0

CodeKata

๋ชฉ๋ก ๋ณด๊ธฐ
6/7
post-thumbnail

์ง€๋‚œ์ฃผ๊ฑด๋ฐ ์™œ ์ง€๊ธˆ ์˜ฌ๋ฆฌ๋‚˜๊ทœ์š”? ํ”„๋กœ์ ํŠธ๋กœ ์ฃฝ์–ด์„œ ๊ทธ๋ž˜์š”..์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค

-DAY1-

<๋ฌธ์ œ>
๋‘ ๊ฐœ์˜ 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 ํ˜•ํƒœ๋กœ ๋‚˜์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ ‘๊ทผ๋ฐฉ๋ฒ•

์ด๋ฒˆ์— ์ฝ”๋“œ์นดํƒ€๋Š”VS LIVE SHARE๋กœ ๋™๊ธฐ ๊ธฐ์ˆ˜๐ŸŒฑ๋‹˜ ํ•จ๊ป˜ ์ง„ํ–‰ํ–ˆ๋‹ค.
๋ญ”๊ฐ€ ์ ‘๊ทผ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š”๊ฑฐ ๊ฐ™์•˜๋Š”๋ฐ ๋‚˜๋Š” ๊ตฌ๊ธ€์— ์˜์กดํ•˜์ง€๋ง๊ณ  ์ด๋ฒˆ์—๋Š” ํ•œ๋ฒˆ ๊ผญ ๋‹ค ํ’€์–ด์ž๋Š” ๋งˆ์Œ์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.

  • ๋จผ์ € +-๋ผ๋Š” ๊ฑธ ๋ณด๊ณ  +๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜๊ฐ€ ๋‚˜๋‰œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
def complex_number_multiply(a, b):
  list_a = a.split('+')
  list_b = b.split('+')
  a1 = int(list_a[0])
  a2 = int(list_a[1].split('i')[0])
  b1 = int(list_b[0])
  b2 = int(list_b[1].split('i')[0])
  
  result_a = a1 * b1 - a2 * b2
  result_b = a1 * b2 + a2 * b1

  result = (str(result_a) + "+"+ str(result_b) + "i")  

  return result
  • ์ฒซ๋ฒˆ์งธ(a), ๋‘๋ฒˆ์งธ(b) ์ˆ˜์‹์„ ๋‚˜๋ˆ ์„œ ์‹ค์ˆ˜์™€ ํ—ˆ์ˆ˜๋ฅผ ๋‚˜๋ˆˆ๋’ค ๊ณ„์‚ฐํ•˜๋Š” ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๊ฒฐ๊ณผ๊ฐ’์„ result์— ๋”ํ•˜๋Š”์‹์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

ํŒŒ์ด์ฌ ๋ฌธ๋ฒ• : split

๋ฌธ์ž์—ด์„ ๋‚˜๋ˆŒ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
๊ด„ํ˜ธ ์•ˆ์— ์•„๋ฌด๊ฒƒ๋„ ๋„ฃ์ง€ ์•Š์œผ๋ฉด ๊ณต๋ฐฑ(๋„์–ด์“ฐ๊ธฐ, ํƒญ ๋“ฑ)์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ„๊ณ  ๊ทธ ๋‚˜๋ˆ ์ง„ ์š”์†Œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋กœ ์ €์žฅ๋˜๋Š”๋ฐ, ๋ถ„ํ• ๋œ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋งŒํผ ๊ฐ๊ฐ์„ ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
์ด๋ฒˆ ์ฝ”ํŠธ์นดํƒ€์ฒ˜๋Ÿผ split()์˜ ๊ด„ํ˜ธ์•ˆ์— +๋ผ๋Š” ๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ๋ฉด ํ•ด๋‹น +๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์ด ๋‚˜๋‰œ๋‹ค.

์ฐธ๊ณ  ๋ชจ๋“ˆ : math, cmath

ํŒŒ์ด์ฌ์—๋Š” ๋ณต์†Œ์ˆ˜๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ์ด ์žˆ๋Š”๋ฐ cmath์ด๋‹ค. ์ด ๋ชจ๋“ˆ์„ Importํ•˜๋ฉด ํŽธํ•˜๊ฒŒ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•œ๋‹ค๐Ÿ˜Ž

import math
import cmath

c = 3 + 2j
print(c) #(3+2j) #ํŒŒ์ด์ฌ์—์„œ๋Š” j๋ฅผ ์‚ฌ์šฉ
print(c.real) #3.0 #์‹ค์ˆ˜ ๋ถ€๋ถ„
print(c.imag) #2.0 #ํ—ˆ์ˆ˜ ๋ถ€๋ถ„

print((3 + 2j) * (3 + 2j)) #(5+12j) #์‹ค์ˆ˜ ๋ถ€๋ถ„ 5, ํ—ˆ์ˆ˜ ๋ถ€๋ถ„ 12 

(์ฐพ์•„๋Š” ๋ƒˆ๋Š”๋ฐ ์ด๊ฑธ ์“ฐ๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ ์šฉํ•ด์„œ ํ’€์ง€๋Š” ์•Š์•˜๋‹ค!)

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)

๊ฒฐ๋ก ์ ์œผ๋กœ split๋ฅผ ํ†ตํ•œ๊ฑด ์ผ์น˜! ๐Ÿ‘

-DAY2-

<๋ฌธ์ œ>
๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋œ ๋ฐฐ์—ด์„ 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) :
  s=s[::-1]
  return s

๋ผ๋Š”.. ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

Model Solution

def reverseString(s) :
    a, b = 0, len(s) - 1

    while a <= b:
        s[a], s[b] = s[b], s[a]
        a += 1
        b -= 1
        
    return s

# def reverseString(s) :
#    return s[::-1]

-DAY3-

<๋ฌธ์ œ>
์–‘์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ m x n ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ธ์ž๋กœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
์ƒ๋‹จ ์™ผ์ชฝ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ, ํ•˜๋‹จ ์˜ค๋ฅธ์ชฝ๊นŒ์ง€ ๊ฐ€๋Š” ๊ธธ์˜ ์š”์†Œ๋ฅผ ๋‹ค ๋”ํ–ˆ์„ ๋•Œ,๊ฐ€์žฅ ์ž‘์€ ํ•ฉ์„ ์ฐพ์•„์„œ return ํ•ด์ฃผ์„ธ์š”.
ํ•œ ์ง€์ ์—์„œ ์šฐ์ธก์ด๋‚˜ ์•„๋ž˜๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ
Input:[[1,3,1],[1,5,1],[4,2,1]]
Output: 7
(์„ค๋ช…)1โ†’3โ†’1โ†’1โ†’1 ์˜ ํ•ฉ์ด ์ œ์ผ ์ž‘์Œ

์ ‘๊ทผ๋ฐฉ๋ฒ•

์ œ์ผ ์ฒ˜์Œ์— ์ƒ๊ฐํ•œ๊ฑด
์ฒ˜์Œ ์‹œ์ž‘์ ์€(0.0)์— ๋งˆ์ง€๋ง‰ ๋„์ฐฉ์ ์ด(m,n)์ผํ…Œ๋‹ˆ ๊ทธ ์‚ฌ์ด์— ๊ฒฝ๋กœ๋Š” ์–ด๋Š๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ์ˆ˜ ์žˆ์œผ๋‚˜ ์˜ค๋ฅธ์ชฝ,์•„๋ž˜๋กœ ๊ฐ€๋Š” ํšŸ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค

#๋ฏธ์™„์„ฑ์ฝ”๋“œ
def move_zeroes(nums):
  a = nums.count(0)
  while a != 0:
    nums.remove(0)
    nums.append(0)
    a -= 1
  return nums

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์ง  ๋กœ์ง์€ 3x3์œผ๋กœ ํ•œ ๊ฒฝ์šฐ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์ด๋ผ 1000x10๋ผ๋ฉด ๋ง๋„ ์•ˆ๋œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค...ใ… ใ… 

Model Solution

def minPathSum(grid):
    m = len(grid)
    n = len(grid[0])
    
    for i in range(1, n):
        grid[0][i] += grid[0][i-1]
        
    for i in range(1, m):
        grid[i][0] += grid[i-1][0]
        
    for i in range(1, m):
        for j in range(1, n):
            grid[i][j] += min(grid[i-1][j], grid[i][j-1])
            
    return grid[-1][-1]

์ด ๋ฐฉ๋ฒ•์ด ๋ฒ ์ŠคํŠธ๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์˜ค.. for loops๋ฅผ ์„ธ๋ฒˆ์ด๋‚˜ ์“ฐ๋‹ค๋‹ˆ...

์ฐธ๊ณ  ์ž๋ฃŒ(์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰ โ€“ A* ์•Œ๊ณ ๋ฆฌ์ฆ˜)

ํ•ด๋‹น๋ฌธ์ œ ๊ด€๋ จ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๋“ค์—ˆ๋‹ค.
Astar ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๋Š”๋ฐ.. ์œผ์Œ, ์•„์ง์€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.
๊ด€๋ จ ๋ธ”๋กœ๊ทธ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ์‹  ๋ถ„์˜ ๋ธ”๋กœ๊ทธ๊ฐ€ ์žˆ์–ด์„œ ๊ผญ ๋‚˜์ค‘์— ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค. ์ผ๋‹จ, ์ด์ •๋„๋กœ๋งŒ ํ•ด๋‘์ž

profile
๐ŸŒฑBackend Developer๐Ÿ‘ฉโ€๐Ÿ’ป

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2020๋…„ 12์›” 27์ผ

trello๋ฅผ ๋ณธ์ธ๊ฑด๊ฐ•๋ณด๋‹ค ์•„๋‚€์—ฌ์ž... pm์ด ์•„๋‹Œ๋ฐ pm์ฒ˜๋Ÿผ ๋ชจ๋‘๋ฅผ ์ผ€์–ดํ•œ์—ฌ์ž.... ํ‚ค๋ณด๋“œ๋ฅผ 80ํ‚ค๋กœ์ธ ๋‚˜๋ณด๋‹ค ๋” ์Ž„๊ฒŒ ๋‘๋‘˜๊ธฐ๋Š”์—ฌ์ž... ๋งˆ์ง€๋ง‰๊นŒ์ง€ ์ž ๋„ ์•ˆ์ž๊ณ  ์—ด์ •์„ ์Ÿ์€์—ฌ์ž.... ๋‹น์‹ ์„ ์กด๊ฒฝํ•ฉ๋‹ˆ๋‹ค ํ”„๋กœ์ ํŠธ๊ธฐ๊ฐ„ ๋„ˆ๋ฌด ์ˆ˜๊ณ ํ–ˆ์–ด์š” ์—ฌ์ฃผ๋ง^^

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ