๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํŒŒ์ด์„  DOCS !

sery270ยท2021๋…„ 4์›” 25์ผ
3

Algorithm

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

์•ˆ๋…•ํ•˜์„ธ์š” ! ์˜ค๋Š˜์€ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํŒŒ์ด์„ ์ด๋ผ๋Š” ์ฃผ์ œ๋กœ, ํŒŒ์ด์„ ์˜ ์ž๋ฃŒํ˜•, ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„, ์ž…์ถœ๋ ฅ ๋ฐฉ์‹, ๋Œ€ํ‘œ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 6๊ฐ€์ง€์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์ •๋…ํ•˜๊ธฐ๋ณด๋‹จ, ํ•„์š”์— ๋”ฐ๋ผ ctrl+f๋กœ ์ฐธ์กฐํ•˜์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์˜ค๋Š˜๋„ ํ™”์ดํŒ… ๐ŸŒฟ

ํŒŒ์ด์„ ์˜ ์ž๋ฃŒํ˜•

  • ํŒŒ์ด์„ ์€ ์›์‹œ ํƒ€์ž…์ด ์—†๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด์ด๋‹ค.

0๏ธโƒฃ ํŒŒ์ด์„ ์˜ ๊ฐ์ฒด ํƒ€์ž…๊ณผ ์ฐธ์กฐ


๋ถˆ๋ณ€ ๊ฐ์ฒด ์ฐธ์กฐ

  • ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ ํ›„, ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ์ฐธ์กฐ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ , ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋ฅผ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค.

    a = 1
    b = a
    print(a)# 1
    b = 2
    print(a)# 1

๊ฐ€๋ณ€ ๊ฐ์ฒด ์ฐธ์กฐ

  • ๊ฐ€๋ณ€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ ํ›„, ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ์ฐธ์กฐ๊ฐ€ ์œ ์ง€๋œ๋‹ค. ์™œ๋ƒ, ์ฐธ์กฐ์˜ ์ฐธ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    • ์ฐธ์กฐ์˜ ์ฐธ์กฐ : a๋Š” ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•œ ์ฐธ์กฐ, ๊ทธ๋ ‡๋‹ค๋ฉด b๋Š” (a๋Š” ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•œ ์ฐธ์กฐ)์˜ ์ฐธ์กฐ

      a = [1,2,3]
      b = a
      print(a) # [1, 2, 3]
      b[0] = 0
      print(a) # [0, 2, 3]

0๏ธโƒฃ ํŒŒ์ด์„ ์˜ ๋น„๊ต ์—ฐ์‚ฐ์ž ==, is


==

  • ==๋Š” ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค.

is

  • is๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ, ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์ฃผ์†Œ๊ฐ’, id()๋ฅผ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค.

1๏ธโƒฃ ์ •์ˆ˜ (์ˆซ์ž)


int

  • int์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋ฉด ์ž๋™์œผ๋กœ long์œผ๋กœ ํƒ€์ž… ๋ณ€ํ™˜ ํ•˜๋ฏ€๋กœ, ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
  • ๋ถˆ๋ณ€๊ฐ์ฒด์— ํ•ด๋‹น๋œ๋‹ค.

Bool

  • int์˜ ์„œ๋ธŒ ํด๋ž˜์Šค๋กœ, ๋‚ด๋ถ€์ ์œผ๋ก  true == 1, false == 0์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ์Œ
  • ๋ถˆ๋ณ€๊ฐ์ฒด์— ํ•ด๋‹น๋œ๋‹ค.

2๏ธโƒฃ ์‹ค์ˆ˜ (์ˆซ์ž)


float

  • ๋ถˆ๋ณ€๊ฐ์ฒด์— ํ•ด๋‹น๋œ๋‹ค.

3๏ธโƒฃ ์ง‘ํ•ฉ


Set

  • ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์Œ

  • ์ˆœ์„œ๊ฐ€ ์—†์Œ

  • ๊ฐ€๋ณ€๊ฐ์ฒด์— ํ•ด๋‹น๋œ๋‹ค

  • dict์ฒ˜๋Ÿผ {}๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    d = { 0: 'v0', 1: 'v1', 2: 'v2'}
    print(d[2]) # v2
    s = {2, 6, 1, 1, 4, 1}
    # print(s[2]) TypeError

4๏ธโƒฃ ๋งคํ•‘


dict

  • ๊ฐ€๋ณ€๊ฐ์ฒด์— ํ•ด๋‹น๋œ๋‹ค.

  • ํ‚ค/ ๊ฐ’ ๊ตฌ์กฐ๋กœ ์ด๋ค„์ง

  • ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ๊ตฌํ˜„๋จ, ์ž๋ฐ”์˜ hashmap์— ๋Œ€์‘๋จ

  • ์ž…๋ ฅ ์ˆœ์„œ ์œ ์ง€ 3.7๋ถ€ํ„ฐ,,^^

  • ์ƒ์„ฑ์ž

    dict()d = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
    d['k4'] = 'v4'
    a = {2: 6, 1: 1, 4: 1}
    print(a[2]) # 6
  • ๋ฐ˜๋ณต

    for k,v in a.items():
  • ์‚ญ์ œ

    del a['k1']
  • defaultdict : ์—†๋Š” ํ‚ค์— ๋Œ€ํ•ด์„œ, ๋””ํดํŠธ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

  • counter : ์•„์ดํ…œ์— ๋Œ€ํ•œ ๊ฐœ์ˆ˜๋ฅผ dict์œผ๋กœ ๋ฆฌํ„ดํ•จ

    • ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ์ง‘ํ•ฉ ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

      • ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๊ทธ๋ƒฅ ๊ณ„์‚ฐ ์—†์ด ๋”•์…”๋„ˆ๋ฆฌ ๊ทธ๋Œ€๋กœ ๋ฆฌํ„ด

        a = [1,2,2,2,2,2,2,4]
        b = collections.Counter(a)
        print(a) # [1, 2, 2, 2, 2, 2, 2, 4]
        print(b) # Counter({2: 6, 1: 1, 4: 1})
  • ordereddict : 3.6์ด์ „์— dict ์— ์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•จ

์‹œํ€€์Šค


  • ์‹œํ€€์Šค๋Š” ์ˆ˜์—ด์œผ๋กœ, ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋‚˜์—ด
  • ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€์— ๋”ฐ๋ผ, ๊ฐ€๋ณ€๊ณผ ๋ถˆ๋ณ€ ์‹œํ€€์Šค๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

5๏ธโƒฃ ๊ฐ€๋ณ€ ์‹œํ€€์Šค


list

  • ์ž์œ ๋กญ๊ฒŒ ๊ฐ’์„ ์ถ”๊ฐ€, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ ๋ฐฐ์—ด, mutable list

  • ๊ฐ€๋ณ€ ๊ฐ์ฒด์— ํ•ด๋‹น๋œ๋‹ค.

  • ์‚ฌ์‹ค์ƒ ์Šคํƒ์„ ์‚ฌ์šฉํ• ์ง€, ํ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์ƒ๊ฐ์•ˆํ•ด๋„, ์™ ๋งŒํ•œ ์—ฐ์‚ฐ์€ ์ „๋ถ€ ์ง€์›ํ•œ๋‹ค.

  • ์ž…๋ ฅ ์ˆœ์„œ ์œ ์ง€, ๋ณ€๊ฒฝ๊ฐ€๋Šฅ, ์ž๋ฃŒํ˜•์„ ์„ž์–ด์„œ ์‚ฝ์ž… ๊ฐ€๋Šฅ

  • ์ƒ์„ฑ์ž

    a = [2, 6, 1, 1, 4, 1]
    print(a[2]) # 1
    list()l = []
  • ๋˜ํ•œ ์Šฌ๋ผ์ด์‹ฑ ๋ฌธ๋ฒ•์œผ๋กœ, ๋ถˆํ•„์š”ํ•œ ๋ฐฐ์—ด ์ˆœํšŒ๊ฐ€ ํ•„์š”์—†๋‹ค. ๋ฐ˜๋ณต๋ฌธ ์ ˆ์•ฝ

  • ์Šฌ๋ผ์ด์‹ฑ

    [1:4] # ๊ฐ’ 3๊ฐœ, 1~3[:2] # ๊ฐ’ 2๊ฐœ, 0~1[1:4:2] # ๊ฐ’ 2๊ฐœ, 1(1+0)๊ณผ 3(1+2)
  • ์ค‘๊ฐ„์— ์žˆ๋Š” ๊ฐ’์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์ธ๋ฑ์Šค๋กœ ์‚ญ์ œ

      del a[1]
    • ๊ฐ’์œผ๋กœ ์‚ญ์ œ

      a.remove(2)
    • ์ธ๋ฑ์Šค๋กœ ์‚ญ์ œ ๋ฐ ๋ฆฌํ„ด

      a.pop(3)

6๏ธโƒฃ ๋ถˆ๋ณ€ ์‹œํ€€์Šค


tuple

  • list์˜ ๋ถˆ๋ณ€ ์‹œํ€€์Šค ๋ฒ„์ „์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค. list์™€ ๊ฑฐ์˜ ํก์‚ฌํ•˜๋‹ค.

  • ๋ถˆ๋ณ€๊ฐ์ฒด์— ํ•ด๋‹น๋œ๋‹ค.

  • ์ƒ์„ฑ์ž

    t = (1, 2, 2, 2, 2, 2, 2, 4)
    print(t[2]) # 2

bytes

  • ๋ถˆ๋ณ€๊ฐ์ฒด์— ํ•ด๋‹น๋œ๋‹ค.

str

  • ๋ถˆ๋ณ€๊ฐ์ฒด์— ํ•ด๋‹น๋œ๋‹ค.

๐Ÿ“ ์ •๋ฆฌ


๋ถ„๋ฅ˜

  • ์ˆซ์ž : int, bool, float
  • ๋ถˆ๋ณ€ ์‹œํ€€์Šค : str, tuple, bytes
  • ๊ฐ€๋ณ€ ์‹œํ€€์Šค : list
  • ์ง‘ํ•ฉ : set
  • ๋งคํ•‘, ํ•ด์‹œ : dict

์ƒ์„ฑ

  • list

    l = list()l2 = [1,2,3,3]
    print(l2[3]) # 3
  • tuple

    t = tuple()t2 = (1,2,3,3)
    print(t2[3]) # 3
  • set

    s = set()s2 = {1,2,3}s3 = {1,2,3,3,3} # {1,2,3}์ด ๋จ
    # print(s2[3]) TypeError
  • dict

    d = dict()s2 = {0: 0, 1: 1, 'two': 'two', 3: '3'}
    print(s2)# {0: 0, 1: 1, 3: '3', 'two': 'two'}๋กœ ์ •๋ ฌ์ด ๋จ
    print(s2[3]) # 3
    print(s2['two']) # two

ํŒŒ์ด์„ ์˜ ์ž๋ฃŒ๊ตฌ์กฐ


1๏ธโƒฃ Stack

  • stack์€ ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

2๏ธโƒฃ Queue

  • Queue๋Š” collections์˜ deque๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    from collections import deque

3๏ธโƒฃ Graph


Graph ๊ตฌํ˜„์— ์žˆ์–ด ๊ณ ๋ คํ•ด์•ผํ•  ๋ณ€์ˆ˜

  • ๋‹จ๋ฐฉํ–ฅ, ๋ฌด๋ฐฉํ–ฅ
  • ๋น„์šฉ, ๋ฌด๋น„์šฉ
  • ์ˆœํ™˜, ๋น„์ˆœํ™˜
  • ์ธ์ ‘ ํ–‰๋ ฌ, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ (์†๋„ ๋น ๋ฅธ๊ฑฐ vs ๋ฉ”๋ชจ๋ฆฌ ์ ์€๊ฑฐ)
  • DFS, BFS
  • ์ง€๋„ ๋ชจ์–‘ Graph

Graph ์ž…๋ ฅ ๋ฐฉ์‹

์ง€๋„ Graph ์ž…๋ ฅ ๋ฐฉ์‹


ํŒŒ์ด์„  ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 6๊ฐ€์ง€

1๏ธโƒฃ ๋‚ด์žฅ ํ•จ์ˆ˜


importํ•˜์ง€ ์•Š์•„๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์ด๋‹ค.

๊ธฐ๋ณธ ์ž…์ถœ๋ ฅ, ์ •๋ ฌ

a = list(map(int, input().split()))
print(a)
print(f"a์˜ ๊ฐ’์€ {a}์ž…๋‹ˆ๋‹ค.")

min(), max()

eval()

  • ์ˆ˜์‹์ด ๋ฌธ์ž์—ด๋กœ ๋“ค์–ด์˜ฌ ๋•Œ
result = eval("(3+5)*7")
print(result) # 56

iterable ๊ฐ์ฒด์šฉ โ€ผ

sum()

result = sum(list(1,2,3))
print(result) # 6

sorted()

result = sorted(list(1,3,2))print(result) # [1,2,3]
result = sorted(list(1,3,2), reverse = True)print(result) # [3,2,1]
  • lambda๋กœ ์ •๋ ฌ ๊ธฐ์ค€ ์ œ์‹œํ•˜๊ธฐ

    result = sorted([('a',1),('b',3),('c',2)], key = lambda x: x[0], 
    reverse = True)
    print(result) # [('c', 2), ('b', 3), ('a', 1)]
    
    result = sorted([('a',1),('b',3),('c',2)], key = lambda x: x[1], 
    reverse = True)
    print(result) # [('b', 3), ('c', 2), ('a', 1)]

2๏ธโƒฃ itertools


๋ฐ˜๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. iterable ๊ฐ์ฒด ์ฒ˜๋ฆฌ

from itertools import permutations

permutations()

from itertools import * 

data = ['A', 'B', 'C']
result = list(permutations(data,3))
print(result)

# [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

combinations()

from itertools import * 

data = ['A', 'B', 'C']
result = list(combinations(data,2))
print(result)

# [('A', 'B'), ('A', 'C'), ('B', 'C')]

product()

from itertools import * 

data = ['A', 'B', 'C']
result = list(product(data,repeat = 2)
print(result)

# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]

combinations_with_replacement()

from itertools import * 

data = ['A', 'B', 'C']
result = list(combinations_with_replacement(data,2))
print(result)

# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

3๏ธโƒฃ collections


from collections import 

deque

  • iterable ๊ฐ์ฒด์šฉ โ€ผ

  • ํ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ

    • ํ ์‚ฝ์ž… โ†’ append()
    • ํ ์‚ญ์ œ โ†’ popleft()
    q = deque([2,3,4])
    q.append(5)
    
    print(q.popleft()) # 2
    print(q) # deque([3, 4, 5])
    print(list(q)) # [3, 4, 5]

counter

  • iterable ๊ฐ์ฒด์šฉ โ€ผ
  • ์›์†Œ์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ์„ธ๋Š”๋ฐ ์‚ฌ์šฉ
  • ๋ฆฌํ„ด์€ dict ํ˜•์ž„
a = [1,2,2,2,2,2,2,4]
b = Counter(a)
print(a) # [1, 2, 2, 2, 2, 2, 2, 4]
print(b) # Counter({2: 6, 1: 1, 4: 1})
print(b[2]) #6

4๏ธโƒฃ math


import math

factorial()

print(math.factorial(5)) # 120

sqrt()

print(math.sqrt(4)) # 2

gcd()

print(math.gcd(21,14)) # 7

5๏ธโƒฃ heapq


  • ์šฐ์„ ์ˆœ์œ„ ํ(ํž™)

6๏ธโƒฃ bisect


  • ์ด์ง„ ํƒ์ƒ‰
profile
๊ฐœ๋ฐœ์„ธ๋ฆฌ์˜ ์„ฑ์žฅ๊ธฐ๐ŸŒฟ

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