[Week 1-3] ๐ŸํŒŒ์ด์ฌ ์ž๋ฃŒ ๊ตฌ์กฐ

Jadeยท2021๋…„ 1์›” 20์ผ
0

๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech

๋ชฉ๋ก ๋ณด๊ธฐ
3/54

1์ฃผ์ฐจ ์ˆ˜์š”์ผ

  • ํŒŒ์ด์ฌ ์ž๋ฃŒ๊ตฌ์กฐ
  • 'ํŒŒ์ด์ฌ์Šค๋Ÿฌ์šด' ์ฝ”๋“œ
  • ํ•จ์ˆ˜๋Š” 1๊ธ‰ ๊ฐ์ฒด

๐Ÿ“[ํŒŒ์ด์ฌ ์ž๋ฃŒ๊ตฌ์กฐ]

๋ฆฌ์ŠคํŠธ๋งŒ ๋จน๊ณ  ์‚ด ์ˆ˜๋Š” ์—†์ž–์•„์š”

  • queue/stack
    ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋„ ๋˜๊ณ , ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด๋„ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์†๋„๊ฐ€ ์ข€ ๋” ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. collections ๋ชจ๋“ˆ์˜ deque()๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
    • ํ๋Š” ์ค„ ์„œ ์žˆ๋Š” ์ƒํ™ฉ์ฒ˜๋Ÿผ First in First out
    • ์Šคํƒ์€ ๋ฐ•์Šค์— ๋ฌผ๊ฑด์„ ๋„ฃ๋Š” ์ƒํ™ฉ์ฒ˜๋Ÿผ First in Last out
  • deque
    ํ์™€ ์Šคํƒ์„ ํ•ฉ์นœ ๊ฒƒ ๊ฐ™์€ ์ž๋ฃŒํ˜•. ์–‘ ์ชฝ์—์„œ push/pop์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    linked list ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜์–ด ํ•œ ํ•ญ๋ชฉ์ด ๋‹ค์Œ ํ•ญ๋ชฉ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
    ๊ทธ๋ž˜์„œ ๊ฐ€์šด๋ฐ ์žˆ๋Š” ์›์†Œ๋ฅผ ํ•˜๋‚˜ ์ง€์šฐ๋Š” ๊ฒŒ ๋น ๋ฅด๋‹ค! ์—ฐ๊ฒฐ ๋Š๊ณ  ๋‹ค๋ฅธ ๋†ˆ ์—ฐ๊ฒฐํ•˜๋ฉด ๋์ด๋‹ค. ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ€์šด๋ฐ ์žˆ๋Š” ์›์†Œ ์ง€์šฐ๋ ค๋ฉด ๋’ค์— ์• ๋“ค์„ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ๋ฐ€์–ด์ค˜์•ผ ํ•ด์„œ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๋” ๊ฑธ๋ฆฐ๋‹ค.

    deque๋Š” ์›๋ž˜ ์–‘์ชฝ์—์„œ push์™€ pop์ด ๊ฐ€๋Šฅํ•œ๋ฐ push/pop์„ ํ•œ์ชฝ์œผ๋กœ๋งŒ ํ•˜๋ฉด ํ๋‚˜ ์Šคํƒ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
    queue ๋ชจ๋“œ: popleft(), append()
    stack ๋ชจ๋“œ: pop(), append()

  • set
    ๋ง ๊ทธ๋Œ€๋กœ ์ง‘ํ•ฉ์ด๋‹ค. intersection, union, difference ๋“ฑ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ค‘๋ณต ์›์†Œ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • ๊ต์ง‘ํ•ฉ, ํ•ฉ์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ์€ ๊ฐ๊ฐ a&b, a|b, a-b์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๊ตฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (์˜ค๋ฒ„๋กœ๋”ฉ๋˜์–ด ์žˆ์Œ)
  • dictionary
    ๋‹ค๋ฅธ ์–ธ์–ด์— ์žˆ๋Š” hashtable๊ณผ ์œ ์‚ฌํ•จ. ๋ฐ์ดํ„ฐ์™€ ์‹๋ณ„์ž๋ฅผ ๊ฐ™์ด ์ €์žฅํ•œ๋‹ค.
    ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  key(์‹๋ณ„์ž)๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๐Ÿ“['ํŒŒ์ด์ฌ์Šค๋Ÿฌ์šด' ์ฝ”๋“œ]

  • split()
    ๋ฌธ์ž์—ด์„ split() ํ•˜๋ฉด ๊ณต๋ฐฑ, ์—”ํ„ฐ, \n ์„ ๊ธฐ์ค€์œผ๋กœ ์ชผ๊ฐœ์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
    split(',') ์ฒ˜๋Ÿผ ํŠน์ • ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ชผ๊ฐค ์ˆ˜๋„ ์žˆ๋‹ค.

  • join()
    ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ ๋“ฑ iterable์„ ''.join() ํ•˜๋ฉด ํ•ญ๋ชฉ์„ ๋‹ค ๋ถ™์—ฌ์„œ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
    '-'.join()์ฒ˜๋Ÿผ ํ•ญ๋ชฉ ์‚ฌ์ด์— ํŠน์ • ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด์„œ ์—ฐ๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

s = "ab cd ef-gh"
print(s.split())
print(s.split('-'))

>>> ['ab', 'cd', 'ef-gh']
    ['ab cd ef', 'gh']
    
---------------------------------

lst = ['a','b','c']
print(''.join())
print('!'.join())

>>> abc
    a!b!c
  • List comprehension
    ๋ฆฌ์ŠคํŠธ ๋‚ดํฌ? ํฌํ•จ๋œ ๋ฆฌ์ŠคํŠธ? ๋ฒˆ์—ญ์ด ์• ๋งคํ•˜๋‹ค.
    ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค๊ณ  append() ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น ๋ฅด๋‹ค๊ณ  ํ•œ๋‹ค.
    ์กฐ๊ฑด์„ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๊ณ  2์ค‘์œผ๋กœ ๋ฐ˜๋ณตํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
a = [i*i for i in range(10) if i%2]
b = [(i,j) for i in range(3) for j in range(2)]
c = [[(i,j) for i in range(3)] for j in range(2)]

print(a)
print(b)
print(c)

>>> [1, 3, 5, 7, 9]
    [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
    [[(0, 0), (1, 0), (2, 0)], [(0, 1), (1, 1), (2, 1)]]
   
  • Dictionary comprehension
    ์ด๋Ÿฐ ๊ฒƒ๋„ ์žˆ๋‹ค! ๋‚ด์žฅํ•จ์ˆ˜ enumerate๋ฅผ ์จ๋„ ๋˜๊ณ , ๋‘๊ฐœ์”ฉ ์ง์ง€์–ด์ง„ iterable์„ ๋„ฃ์–ด๋„ ๋œ๋‹ค.
myStr = "coffee"
a = {i:v for i,v in enumerate(myStr)}
b = {v:i for i,v in enumerate(myStr)}
# ๋”•์…”๋„ˆ๋ฆฌ๋Š” ํ‚ค ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํ‚ค๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ฑ๋กํ•  ๊ฒฝ์šฐ
# ๋‚˜์ค‘์— ๋“ฑ๋ก๋œ ๊ฐ’์œผ๋กœ ๋ฎ์–ด์”Œ์›Œ์ง„๋‹ค

print(a)
print(b)

>>> {0: 'c', 1: 'o', 2: 'f', 3: 'f', 4: 'e', 5: 'e'}
    {'c': 0, 'o': 1, 'f': 3, 'e': 5}

๐Ÿ“Œ[ํ•จ์ˆ˜๋Š” 1๊ธ‰ ๊ฐ์ฒด]

ํ•จ์ˆ˜๋Š” 1๊ธ‰ ๊ฐ์ฒด๋‹ค, ํ•จ์ˆ˜๋Š” 1๊ธ‰ ๊ฐ์ฒด๋‹ค, ํ•จ์ˆ˜๋Š” 1๊ธ‰ ๊ฐ์ฒด...๊ฐ€ ๋ญ์ง€?

  • 1๊ธ‰ ๊ฐ์ฒด๋ž€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ณ , ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ๊ณ , ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.

  • ํŒŒ์ด์ฌ์—์„œ ํ•จ์ˆ˜๋Š” 1๊ธ‰ ๊ฐ์ฒด๋ผ์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋„ฃ๊ฑฐ๋‚˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ํ•จ์ˆ˜๊ฐ€ ๊ผญ ํŒŒ์ด์ฌ์—์„œ๋งŒ 1๊ธ‰ ๊ฐ์ฒด์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

def add(a, b):
    return a+b

def sub(a, b):
    return a-b

def calc(func, a, b): # ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰
    return func(a,b)
    
print(calc(add, 3, 5)) # calc ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ add ํ•จ์ˆ˜๋ฅผ ๋„˜๊ฒจ์ฃผ์—ˆ๋‹ค
print(calc(sub, 3, 5)) # calc ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ sub ํ•จ์ˆ˜๋ฅผ ๋„˜๊ฒจ์ฃผ์—ˆ๋‹ค

>>> 8
   -2
    

map()์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋‚˜ sorted()์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๋ฐ›๋Š”๋‹ค. sorted()์—์„œ ์ •๋ ฌํ•  ๊ธฐ์ค€๊ฐ’์„ ๊ณ ๋ฅผ ๋•Œ lambda๋กœ ์ธ๋ผ์ธ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์“ฐ๊ณค ํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๋„˜๊ฒจ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๊ทธ๋žฌ๋˜ ๊ฑฐ์˜€๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ def ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.

def getKey(item):
    return item[1] # ๊ทธ๋ƒฅ 1๋ฒˆ ํ•ญ๋ชฉ์„ ๋Œ๋ ค์ฃผ๋Š” ์นœ๊ตฌ
    
a = [(1,2), (8,1), (0,4)]
print(sorted(a, getKey))
# getKey ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ญ˜ ๋”ฐ๋กœ ์•ˆ ๋„ฃ์–ด์ฃผ๊ณ  ํ•จ์ˆ˜๋งŒ ์ „๋‹ฌํ•œ๋‹ค.
# ์ „๋‹ฌ๋ฐ›์€ ํ•จ์ˆ˜ getKey๋Š” sorted ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ํ•œ๋‹ค.

>>> [(8,1), (1,2), (0,4)]

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ[ํ”ผ์–ด ์„ธ์…˜]

์˜ค์ „์— ๋“ค์€ ๊ฐ•์˜์—์„œ ์žฌ๋ฐŒ์—ˆ๋˜ ๋ถ€๋ถ„ ์–˜๊ธฐ๋„ ํ•˜๊ณ  ๊ถ๊ธˆํ•ด์„œ ๋” ์ฐพ์•„๋ณธ ๋ถ€๋ถ„ ์–˜๊ธฐ๋„ ํ•˜๊ณ  ์งˆ๋ฌธ๋„ ์ข€ ํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ์–˜๊ธฐ๋„ ์ข€ ํ•˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–˜๊ธฐ๋„ ํ•˜๊ณ  ํ•˜์Šค์Šคํ†ค AI ์–˜๊ธฐ๋„ ํ•˜๊ณ  ์กฐ๊ต๋‹˜์„ ์ดˆ๋Œ€ํ•ด์„œ ์งˆ๋ฌธ๋„ ๋ช‡ ๊ฐ€์ง€ ํ•˜๊ณ  ์ง„๋กœ ์–˜๊ธฐ๋„ ํ•˜๊ณ  ์ „์ž์ฝง์ˆ˜์—ผ๐Ÿง” ์–˜๊ธฐ๋„ ํ–ˆ๋‹ค.

profile
๋ฐ˜๊ฐ€์›Œ์šฉ

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