Skip to content

Latest commit

ย 

History

History
808 lines (485 loc) ยท 28.5 KB

data_structure.md

File metadata and controls

808 lines (485 loc) ยท 28.5 KB

prepare_frontend_interview

์ž๋ฃŒ๊ตฌ์กฐ

ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ  ๋ฉด์ ‘์„ ์œ„ํ•œ ํ•ธ๋“œ๋ถ ๋งŒ๋“ค๊ธฐ

๊ณต๋ถ€ํ•˜๊ณ  ์•Œ์•„์•ผ ํ•  ๋งŒํ•œ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค

python์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ์˜ ์˜ˆ์‹œ๋“ค์ด ์žˆ์ง€๋งŒ, JS์™€๋Š” ํฐ ์ฐจ์ด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์‹œ ์ฝ”๋“œ๋กœ๋Š” ํŒŒ์ด์ฌ์„ ๋„ฃ์–ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค

๋Œ€ํ•™ ์ •๊ทœ ๊ต์œก ๊ณผ์ •์œผ๋กœ ์˜ค๋žœ ๊ธฐ๊ฐ„ ๊ณต๋ถ€ํ•ด์„œ ๋ฐฐ์šด ๋‚ด์šฉ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊นŠ์ด ๋ฉด์—์„œ ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

์ž๋ฃŒ๊ตฌ์กฐ์™€ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ˆ์‹œ๋ฅผ ๊ฐ„๋‹จํžˆ ์ž‘์„ฑํ•˜์—ฌ ์ž๋ฃŒ ๊ตฌ์กฐ๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด ์ •๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

๋ชฉ์ฐจ

์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”

์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค

์ฝ”๋“œ ์ƒ์—์„œ ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ์ดํ„ฐ ํŠน์„ฑ์— ๋”ฐ๋ผ, ์ฒด๊ณ„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

์–ด๋–ค ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ, ์ฝ”๋“œ์˜ ํšจ์œจ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค


ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ด์œ  (์˜ˆ)

์šฐํŽธ๋ฒˆํ˜ธ: 5์ž๋ฆฌ ์šฐํŽธ๋ฒˆํ˜ธ๋กœ ๊ตญ๊ฐ€์˜ ๊ธฐ์ดˆ๊ตฌ์—ญ์„ ์ œ๊ณต

5์ž๋ฆฌ ์šฐํŽธ๋ฒˆํ˜ธ์—์„œ ์•ž 3์ž๋ฆฌ๋Š” ์‹œ, ๊ตฐ, ์ž์น˜๊ตฌ๋ฅผ ํ‘œ๊ธฐ, ๋’ค 2์ž๋ฆฌ๋Š” ์ผ๋ จ๋ฒˆํ˜ธ๋กœ ๊ตฌ์„ฑ

ํ•™์ƒ ๊ด€๋ฆฌ: ํ•™๋…„, ๋ฐ˜, ๋ฒˆํ˜ธ๋ฅผ ํ•™์ƒ์—๊ฒŒ ๋ถ€์—ฌํ•ด์„œ, ํ•™์ƒ๋ถ€๋ฅผ ๊ด€๋ฆฌ

XXํ•™๋…„, X๋ฐ˜, X๋ฒˆ ํ•™์ƒ

๋งŒ์•ฝ ์œ„ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์ด ์—†๋‹ค๋ฉด, 3000๋ช… ํ•™์ƒ ์ค‘ ํŠน์ • ํ•™์ƒ์„ ์ฐพ๊ธฐ ์œ„ํ•ด, ์ „์ฒด ํ•™์ƒ๋ถ€๋ฅผ ๋ชจ๋‘ ํ›‘์–ด์•ผ ํ•จ


๋Œ€ํ‘œ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋‚˜์š”

์ž๋ฃŒ๊ตฌ์กฐ ์ž๋ฃŒ๊ตฌ์กฐ
์„ ํ˜• ๊ตฌ์กฐ ๋น„์„ ํ˜• ๊ตฌ์กฐ
๋ฆฌ์ŠคํŠธ
์Šคํƒ
ํ
๋ฑ
ํŠธ๋ฆฌ
๊ทธ๋ž˜ํ”„

์ž๋ฃŒ๊ตฌ์กฐ

์ถœ์ฒ˜: https://boycoding.tistory.com/32


์„ ํ˜• ๊ตฌ์กฐ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”

์„ ํ˜• ๊ตฌ์กฐ (Linear Structure)

๋ฐ์ดํ„ฐ๋“ค์ด ์ผ๋ ฌ๋กœ ์ญ‰ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ

๋น„ ์„ ํ˜• ๊ตฌ์กฐ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”

๋น„ ์„ ํ˜• ๊ตฌ์กฐ (Non-Linear Structure)

๋ฐ์ดํ„ฐ๊ฐ€ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ


๋ฆฌ์ŠคํŠธ

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜์—ดํ•˜๊ณ , ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ๋ฑ์Šค์— ๋Œ€์‘ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
  • ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ ํƒ€์ž…์ด ๋ฐฐ์—ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ

๋ฆฌ์ŠคํŠธ๋Š” ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

  • ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด
  • ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด

์žฅ์ 

  • ๋น ๋ฅธ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
  • ์ฒซ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜ [0]์—์„œ ์ƒ๋Œ€์ ์ธ ์œ„์น˜๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค (์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค)

๋‹จ์ 

  • ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€/ ์‚ญ์ œ๊ฐ€ ์–ด๋ ต๋‹ค
  • ๋ฏธ๋ฆฌ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•จ

make a list using C

  • C ์–ธ์–ด์—์„œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์‚ฌ์ „์— ์ •์˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค
#include <stdio.h>

int main(int argc, char * argv[])
{
    char country[3] = "US";
    printf ("%c%c\n", country[0], country[1]);
    printf ("%s\n", country);
    return 0;
}

make a list using python

  • Python์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด(๋ฌธ์ž์—ด)์˜ ๊ธธ์ด๋ฅผ ์‚ฌ์ „์— ์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋™์ž‘ํ•œ๋‹ค
  • JS๋˜ํ•œ ๊ธธ์ด๋ฅผ ์‚ฌ์ „์— ์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋™์ž‘ํ•œ๋‹ค
  • ์ด๋Ÿฌํ•œ ํŠน์ง• ๋•Œ๋ฌธ์— ํŒŒ์ด์ฌ๊ณผ JS์˜ ๋ฐฐ์—ด์ด ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™๋‹ค๊ณ  ๋ณผ ์ˆ˜๋Š” ์—†๋‹ค
country = 'US'
print (country)

>>> US

country = country + 'A'
print(country)

>>> USA

1 ์ฐจ์› ๋ฐฐ์—ด

# 1์ฐจ์› ๋ฐฐ์—ด: ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„์‹œ
data_list = [1, 2, 3, 4, 5]

print(data_list)
>>>

[1,2,3,4,5]

2 ์ฐจ์› ๋ฐฐ์—ด

# 2์ฐจ์› ๋ฐฐ์—ด: ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„์‹œ
data_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

print(data_list)

[
  [1,2,3],
  [4,5,6],
  [7,8,9]
]

ํ

Queue ๊ตฌ์กฐ

  • ์ค„์„ ์„œ๋Š” ํ–‰์œ„์™€ ์œ ์‚ฌ
  • ๊ฐ€์žฅ ๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ
  • ์Œ์‹์ ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์ค„์„ ์„  ์‚ฌ๋žŒ์ด ์ œ์ผ ๋จผ์ € ์Œ์‹์ ์— ์ž…์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผ
  • FIFO(First-In, First-Out) ๋˜๋Š” LILO(Last-In, Last-Out) ๋ฐฉ์‹์œผ๋กœ ์Šคํƒ๊ณผ ๊บผ๋‚ด๋Š” ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋Œ€

ํ

๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋Š” ํ


์•Œ์•„๋‘˜ ์šฉ์–ด

  • Enqueue: ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ธฐ๋Šฅ (JS์—์„œ push)
  • Dequeue: ํ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ธฐ๋Šฅ (JS์—์„œ shift)

ํŒŒ์ด์ฌ queue ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉํ•ด์„œ ํ ์ž๋ฃŒ ๊ตฌ์กฐ ์‚ฌ์šฉํ•˜๊ธฐ

queue ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ๋‹ค์–‘ํ•œ ํ ๊ตฌ์กฐ๋กœ โ‘  Queue(), โ‘ก LifoQueue(), โ‘ข PriorityQueue() ์ œ๊ณต

ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ ํ”„๋กœ๊ทธ๋žจ์— ๋”ฐ๋ผ ์ ํ•ฉํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉ

Queue(): ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ ์ž๋ฃŒ ๊ตฌ์กฐ

# ํ (Queue)

import queue

# FIFO QUEUE (์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ์˜ ํ) ์‚ฌ์šฉํ•˜๊ธฐ

data_queue = queue.Queue()

print('data_queue:', data_queue)
print('type:', type(data_queue))

print()

# ๋ฐ์ดํ„ฐ ์‚ฝ์ž… (put)

data_queue.put(1)
data_queue.put(2)
data_queue.put(3)

print('data_queue.qsize():', data_queue.qsize()) >>> 3

print()

# ๋ฐ์ดํ„ฐ ์ถ”์ถœ (get)

print('data_queue.get():', data_queue.get()) >>> 1
print('data_queue.get():', data_queue.get()) >>> 2
print('data_queue.get():', data_queue.get()) >>> 3

LifoQueue(): ๋‚˜์ค‘์— ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ์ถœ๋ ฅ๋˜๋Š” ๊ตฌ์กฐ (์Šคํƒ ๊ตฌ์กฐ๋ผ๊ณ  ๋ณด๋ฉด ๋จ)

import queue

# LIFO QUEUE (์Šคํƒ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์˜ ํ) ์‚ฌ์šฉํ•˜๊ธฐ

data_queue = queue.LifoQueue()

print('data_queue:', data_queue)
print('type:', type(data_queue))

print()

# ๋ฐ์ดํ„ฐ ์‚ฝ์ž… (put)

data_queue.put(1)
data_queue.put(2)
data_queue.put(3)

print('data_queue.qsize():', data_queue.qsize()) >>> 3

print()

# ๋ฐ์ดํ„ฐ ์ถ”์ถœ (get)

print('data_queue.get():', data_queue.get()) >>> 3
print('data_queue.get():', data_queue.get()) >>> 2
print('data_queue.get():', data_queue.get()) >>> 1

PriorityQueue(): ๋ฐ์ดํ„ฐ๋งˆ๋‹ค ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋„ฃ์–ด์„œ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ

# PriorityQueue() ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์žˆ๋Š” ํ ๋งŒ๋“ค๊ธฐ

import queue

data_queue = queue.PriorityQueue()

# - ํŠœํ”Œ ํ˜•์‹ ( , )์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ธํ•œ๋‹ค
# - ์ˆซ์ž๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค (1 <<<<< ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์Œ , .... , 15 <<<< ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์Œ)
# - ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํŠœํ”Œ์ด ๋จผ์ € Dequeue ๋œ๋‹ค

data_queue.put((10, "korea"))
data_queue.put((5, 1))
data_queue.put((15, "china"))

print()

print(data_queue.qsize())  # >>> 3

print()

print(data_queue.get())  # >>> (5,1)
print(data_queue.get())  # >>> (10, 'korea')
print(data_queue.get())  # >>> (15, 'china')

์–ด๋””์— ํ๊ฐ€ ๋งŽ์ด ์“ฐ์ผ๊นŒ?

๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น์„ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ฅด๋ง ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค

queue ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ

queue_list = list()


def enqueue(data):
    queue_list.append(data)


def dequeue():
    data = queue_list[0]
    del queue_list[0]
    return data


for index in range(10):
    enqueue(index)

print('queue_list:', queue_list)
# >>> queue_list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

dequeue()

print('queue_list:', queue_list)
# >>> queue_list: [1, 2, 3, 4, 5, 6, 7, 8, 9]

์Šคํƒ

Stack ๊ตฌ์กฐ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ œํ•œ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ
  • ํ•œ์ชฝ ๋์—์„œ๋งŒ ์ž๋ฃŒ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋บ„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ
  • ๊ฐ€์žฅ ๋‚˜์ค‘์— ์Œ“์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๋นผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
ํ(Queue) ์Šคํƒ(Stack)
F.I.F.O
First In First Out
L.I.F.O
Last In First Out

์Šคํƒ ๊ตฌ์กฐ

์Šคํƒ์€ LIFO(Last In, Fisrt Out) ๋˜๋Š” FILO(First In, Last Out) ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ์‹์„ ๋”ฐ๋ฆ„

LIFO: ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ์ถ”์ถœํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์ •์ฑ… FILO: ์ฒ˜์Œ์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ถ”์ถœํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์ •์ฑ…

๋Œ€ํ‘œ์ ์ธ ์Šคํƒ์˜ ํ™œ์šฉ

์ปดํ“จํ„ฐ ๋‚ด๋ถ€์˜ ํ”„๋กœ์„ธ์Šค ๊ตฌ์กฐ์˜ ํ•จ์ˆ˜ ๋™์ž‘ ๋ฐฉ์‹

์ฃผ์š” ๊ธฐ๋Šฅ

push(): ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ธฐ pop(): ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํƒ์—์„œ ๊บผ๋‚ด๊ธฐ

์Šคํƒ

์Šคํƒ์˜ ์žฅ๋‹จ์ 

  • ์žฅ์  ๐Ÿ”ฅ

    • ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•ด์„œ, ๊ตฌํ˜„์ด ์‰ฝ๋‹ค
    • ๋ฐ์ดํ„ฐ ์ €์žฅ/์ฝ๊ธฐ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค
  • ๋‹จ์  ๐Ÿ”ฅ

    • ๋ฐ์ดํ„ฐ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์•ผ ํ•œ๋‹ค

    • ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ 1000๋ฒˆ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค

    • ์ €์žฅ ๊ณต๊ฐ„์˜ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค

    • ๋ฏธ๋ฆฌ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋งŒํผ ์ €์žฅ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด์•ผ ํ•œ๋‹ค

  • ์Šคํƒ์€ ๋‹จ์ˆœํ•˜๊ณ  ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, ๋ณดํ†ต ๋ฐฐ์—ด ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž„


ํŒŒ์ด์ฌ์„ ํ†ตํ•ด ์Šคํƒ ๊ตฌ์กฐ ์‚ดํŽด๋ณด๊ธฐ

list ์ž๋ฃŒํ˜•์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ๋กœ append(push), pop() ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค

# ์Šคํƒ (Stack)

# ํ์™€ ๋‹ฌ๋ฆฌ ํŒŒ์ด์ฌ, JS ์—์„œ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค
# ํ์˜ ๊ฒฝ์šฐ data = queue.Queue() ์™€ ๊ฐ™์ด ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ–ˆ์—ˆ์Œ

# append: ์‚ฝ์ž…ํ•˜๊ธฐ (push)
# pop: ๊บผ๋‚ด๊ธฐ (pop)

data_stack = list()

data_stack.append(1)
data_stack.append(2)

print('data_stack:', data_stack) >>> [1,2]

print()

data_stack.pop()

print('โ‘  data_stack.pop():', data_stack) >>> [1]

print()

data_stack.pop()

print('โ‘ก data_stack.pop():', data_stack) >>> [0]

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ฐ์Šต

๋ฆฌ์ŠคํŠธ ๋ณ€์ˆ˜๋กœ ์Šคํƒ์„ ๋‹ค๋ฃจ๋Š” pop, push ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

stack_list = list()


def push(data):
    stack_list.append(data)


def pop():
    data = stack_list[-1]
    del stack_list[-1]
    return data


for elem in range(10):
    push(elem)


print('stack_list', stack_list)
# >>> stack_list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print()

pop()

print('stack_list', stack_list)
# >>> stack_list [0, 1, 2, 3, 4, 5, 6, 7, 8]

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ

Linked List ๊ตฌ์กฐ

  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ผ๊ณ ๋„ ํ•œ๋‹ค
  • ๋ฐฐ์—ด์€ ์ˆœ์ฐจ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
  • ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ๋–จ์–ด์ง„ ๊ณณ์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™”์‚ดํ‘œ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
  • ๋ณธ๋ž˜ C์–ธ์–ด์—์„œ๋Š” ์ฃผ์š”ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด์ง€๋งŒ, ํŒŒ์ด์ฌ์€ ๋ฆฌ์ŠคํŠธ ํƒ€์ž…์ด ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ง€์›

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ์šฉ์–ด

๋…ธ๋“œ(Node): ๋ฐ์ดํ„ฐ ์ €์žฅ ๋‹จ์œ„ (๋ฐ์ดํ„ฐ๊ฐ’, ํฌ์ธํ„ฐ) ๋กœ ๊ตฌ์„ฑ

ํฌ์ธํ„ฐ(pointer): ๊ฐ ๋…ธ๋“œ ์•ˆ์—์„œ, ๋‹ค์Œ์ด๋‚˜ ์ด์ „์˜ ๋…ธ๋“œ์™€์˜ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„

์ผ๋ฐ˜์ ์ธ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ

(์ถœ์ฒ˜: wikipedia, https://en.wikipedia.org/wiki/Linked_list)

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์žฅ๋‹จ์  (์ „ํ†ต์ ์ธ C ์–ธ์–ด์—์„œ์˜ ๋ฐฐ์—ด๊ณผ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ)

  • ์žฅ์ 

    • ๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค
    • <-> ๋ฐฐ์—ด์€ ๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด์•ผ ํ•จ
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ ํ• ๋•Œ๋งˆ๋‹ค ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค
    • ์›์†Œ ๊ฒ€์ƒ‰ ์‹œ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊นŒ์ง€ ์ผ์ผ์ด ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค
    • ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œ ์—ฐ์‚ฐ ์‹œ์— ํ•ด๋‹น ์›์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ํ›„ ์‚ญ์ œ, ์‚ฝ์ž… ์—ฐ์‚ฐ์ด ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค
    • ์ฆ‰, ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์žฆ์€ ๊ฒฝ์šฐ Linked List๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค
    • why? ๋ฐฐ์—ด ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์‚ฌ์ „์— ์ •ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ๋‹จ์ 

    • ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ๋ณ„๋„ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, ์ €์žฅ ๊ณต๊ฐ„ ํšจ์œจ์ด ๋†’์ง€ ์•Š์Œ
    • ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋Š๋ฆผ
    • ์ค‘๊ฐ„ ๋ฐ์ดํ„ฐ ์‚ญ์ œ์‹œ, ์•ž๋’ค ๋ฐ์ดํ„ฐ์˜ ์—ฐ๊ฒฐ์„ ์žฌ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ถ€๊ฐ€์ ์ธ ์ž‘์—… ํ•„์š”
    • ๊ฒ€์ƒ‰์ด ์žฆ์€ ๊ฒฝ์šฐ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ

๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ(Doubly linked list) ๊ธฐ๋ณธ ๊ตฌ์กฐ

  • ๋‹จ๋ฐฉํ–ฅ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ head ์ฐจ๋ก€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„๊ฐ”์Œ
  • ๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ์•ž ๋’ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ๋…ธ๋“œ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•จ
  • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ผ๊ณ ๋„ ํ•จ
  • ์žฅ์ : ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์„œ ๋…ธ๋“œ ํƒ์ƒ‰์ด ์–‘์ชฝ์œผ๋กœ ๋ชจ๋‘ ๊ฐ€๋Šฅ

๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ

(์ถœ์ฒ˜: wikipedia, https://en.wikipedia.org/wiki/Linked_list)


ํ•ด์‰ฌ ํ…Œ์ด๋ธ”

ํ•ด์‰ฌ ํ…Œ์ด๋ธ”(Hash Table) ๊ตฌ์กฐ

ํ•ด์‰ฌ ํ…Œ์ด๋ธ”(Hash Table): ํ‚ค(Key)์— ๋ฐ์ดํ„ฐ(Value)๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

  • Key๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์†๋„๊ฐ€ ํš๊ธฐ์ ์œผ๋กœ ๋นจ๋ผ์ง
  • (ํŠน์ • ์กฐ๊ฑด์— ๋งž์ถฐ ๋ฐฐ์—ด์„ ๋ชจ๋‘ ์ˆœํšŒํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์†Œ๋ฆฌ)
  • ํŒŒ์ด์ฌ ๋”•์…”๋„ˆ๋ฆฌ(Dictionary) ํƒ€์ž…์ด ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์˜ ์˜ˆ: Key๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ(Value)๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์Œ
  • ๋ณดํ†ต ๋ฐฐ์—ด๋กœ ๋ฏธ๋ฆฌ Hash Table ์‚ฌ์ด์ฆˆ๋งŒํผ ์ƒ์„ฑ ํ›„์— ์‚ฌ์šฉ (๊ณต๊ฐ„๊ณผ ํƒ์ƒ‰ ์‹œ๊ฐ„์„ ๋งž๋ฐ”๊พธ๋Š” ๊ธฐ๋ฒ•)
  • ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์˜ ๊ธธ์ด(์Šฌ๋กฏ์˜ ๊ฐœ์ˆ˜)๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•
  • ๋‹จ, ํŒŒ์ด์ฌ์—์„œ๋Š” ํ•ด์‰ฌ๋ฅผ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•  ์ด์œ ๊ฐ€ ์—†์Œ (๋”•์…”๋„ˆ๋ฆฌ ํƒ€์ž… { 'key': 'value' } ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ)
  • JS ๋˜ํ•œ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค (๊ฐ์ฒด ํƒ€์ž… { key: 'value' } ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ)

์•Œ์•„๋‘˜ ์šฉ์–ด

  • ํ•ด์‰ฌ(Hash): ์ž„์˜ ๊ฐ’์„ ๊ณ ์ • ๊ธธ์ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ
  • ํ•ด์‰ฌ ํ…Œ์ด๋ธ”(Hash Table): ํ‚ค ๊ฐ’์˜ ์—ฐ์‚ฐ์— ์˜ํ•ด ์ง์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
  • ํ•ด์‹ฑ ํ•จ์ˆ˜(Hashing Function): Key๋ฅผ ํ•ด์‹ฑ ํ•จ์ˆ˜๋กœ ์—ฐ์‚ฐํ•ด์„œ, ํ•ด์‰ฌ ๊ฐ’์„ ์•Œ์•„๋‚ด๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์—์„œ ํ•ด๋‹น Key์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์œ„์น˜๋ฅผ ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
  • ์Šฌ๋กฏ(Slot): ํ•œ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„
  • ์ €์žฅํ•  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด Key๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„ ํ•จ์ˆ˜๋„ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ

ํ•ด์‹œํ…Œ์ด๋ธ”

ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์˜ ์žฅ๋‹จ์ ๊ณผ ์ฃผ์š” ์šฉ๋„

  • ์žฅ์ 

    • ๋ฐ์ดํ„ฐ ์ €์žฅ/์ฝ๊ธฐ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. (๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.)
    • ํ•ด์‰ฌ๋Š” ํ‚ค์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€(์ค‘๋ณต) ํ™•์ธ์ด ์‰ฝ๋‹ค
    • ํ•ด์‰ฌ๋Š” ํ‚ค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๋ฐ์ดํ„ฐ์˜ ์—ฌ๋ถ€(์œ ๋ฌด)๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค
  • ๋‹จ์ 

    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ €์žฅ๊ณต๊ฐ„์ด ์ข€ ๋” ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค
    • ์—ฌ๋Ÿฌ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ์†Œ๊ฐ€ ๋™์ผํ•  ๊ฒฝ์šฐ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ณ„๋„ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค
    • ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋‚˜๋ˆ ์ ธ ์ €์žฅ๋˜๋Š” ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์˜ ์ฃผ์†Œ๊ฐ€ ๊ฐ™์€๋ฐ, ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
    • ํ‚ค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฎ์–ด์”Œ์›Œ์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
    • ์ค‘๋ณต์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์˜ ๊ณต๊ฐ„์„ ๋„“๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค
  • ์ฃผ์š” ์šฉ๋„

    • ๊ฒ€์ƒ‰์ด ๋งŽ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
    • ์ €์žฅ, ์‚ญ์ œ, ์ฝ๊ธฐ๊ฐ€ ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ
    • ์บ์‰ฌ ๊ตฌํ˜„์‹œ (์ค‘๋ณต ํ™•์ธ์ด ์‰ฝ๊ธฐ ๋•Œ๋ฌธ)
    • ์บ์‰ฌ๋Š” ๋™์ผํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒฝ์šฐ https://naver.com, ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ด์™ธ์—๋Š”
    • ์‚ฌ์šฉ์ž์˜ ์บ์‰ฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค

ํŠธ๋ฆฌ

ํŠธ๋ฆฌ(Tree) ๊ตฌ์กฐ

ํŠธ๋ฆฌ: ๋…ธ๋“œ(node)์™€ ๋ธŒ๋žœ์น˜(branch)๋ฅผ ์ด์šฉํ•ด์„œ, ์‚ฌ์ดํด์„ ์ด๋ฃจ์ง€ ์•Š๋„๋ก ๊ตฌ์„ฑํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

  • ์‚ฌ์ดํด์€ ์•„๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ 5 - 3 - 6 ์ˆœ์œผ๋กœ ์›์„ ๊ทธ๋ฆฌ๋ฉฐ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ Siblings ๋ผ๋ฆฌ๋Š” ๋ธŒ๋žœ์น˜๋กœ ์ด์–ด์ง€์ง€ ์•Š๋Š”๋‹ค ๐Ÿ”ฅ

์‹ค์ œ๋กœ ์–ด๋””์— ๋งŽ์ด ์‚ฌ์šฉ๋˜๋‚˜?

  • ํŠธ๋ฆฌ ์ค‘ ์ด์ง„ ํŠธ๋ฆฌ (Binary Tree)ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋กœ, ํƒ์ƒ‰(๊ฒ€์ƒ‰) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„์„ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉ๋จ
  • ํŠธ๋ฆฌ ๋‚ด๋ถ€์— ์–ด๋–ค ๊ฐ’์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€์˜ ์œ ๋ฌด๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค
  • ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ์ „๋ถ€ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๊ธฐ์ค€(left right)์„ ๊ฐ€์ง€๊ณ  ํƒ์ƒ‰ํ•˜๋ฏ€๋กœ ๋”์šฑ ๋น ๋ฅด๋‹ค

์•Œ์•„๋‘˜ ์šฉ์–ด

  • Node: ํŠธ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ (๋ฐ์ดํ„ฐ์™€ ๋‹ค๋ฅธ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ Branch ์ •๋ณด ํฌํ•จ)
  • Root Node: ํŠธ๋ฆฌ ๋งจ ์œ„(์ตœ ์ƒ๋‹จ)์— ์žˆ๋Š” ๋…ธ๋“œ
  • Level: ์ตœ์ƒ์œ„ ๋…ธ๋“œ๋ฅผ Level 0์œผ๋กœ ํ•˜์˜€์„ ๋•Œ, ํ•˜์œ„ Branch๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ๊นŠ์ด๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • Parent Node: ์–ด๋–ค ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋ ˆ๋ฒจ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
  • Child Node: ์–ด๋–ค ๋…ธ๋“œ์˜ ์ƒ์œ„ ๋ ˆ๋ฒจ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
  • Leaf Node (Terminal Node): Child Node๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š” ๋…ธ๋“œ
  • Sibling (Brother Node): ๋™์ผํ•œ Parent Node๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ
  • Depth: ํŠธ๋ฆฌ์—์„œ Node๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ Level (๊นŠ์ด๋ฅผ ๋‚˜ํƒ€๋ƒ„)

ํŠธ๋ฆฌ ๊ตฌ์กฐ

์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)์™€ ์ด์ง„ ํƒ์ƒ‰ํŠธ๋ฆฌ(Binary Search Tree)

  • ์ด์ง„ ํŠธ๋ฆฌ: ๋…ธ๋“œ์˜ ์ตœ๋Œ€ ๋ธŒ๋žœ์น˜๊ฐ€ 2๊ฐœ์ธ ํŠธ๋ฆฌ

    • ์ด์ง„ ํŠธ๋ฆฌ๊ตฌ์กฐ์—์„œ ์›Œ๋‚™ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋งŽ์ด ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ง„ ํŠธ๋ฆฌ = ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค
    • ํ•˜์ง€๋งŒ ๋‘˜์€ ๊ฐ™์ง€ ์•Š์Œ
    • ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ตœ๋Œ€ ๋ธŒ๋žœ์น˜๊ฐ€ 2๊ฐœ์ธ ํŠธ๋ฆฌ์ด๋ฉฐ, ์‚ฌ์ดํด์„ ์ด๋ฃจ์ง€ ์•Š๋„๋ก ๊ตฌ์„ฑํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด์ง€๋งŒ,
    • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ํ•ด๋‹น ์ด์ง„ ํŠธ๋ฆฌ์˜ ํŠน์ง•์„ ๋ฐ”ํƒ•์œผ๋กœ ํŠน์ • ์กฐ๊ฑด์„ ๋ถ™์ธ ํŠธ๋ฆฌ์ด๋‹ค
  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ: ์ด์ง„ ํŠธ๋ฆฌ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€์ ์ธ ์กฐ๊ฑด์ด ์žˆ๋Š” ํŠธ๋ฆฌ

    • ์™ผ์ชฝ ๋…ธ๋“œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’, ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

์ด์ง„ ํŠธ๋ฆฌ

์ž๋ฃŒ ๊ตฌ์กฐ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์žฅ์ ๊ณผ ์ฃผ์š” ์šฉ๋„

  • ์ฃผ์š” ์šฉ๋„: ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰(ํƒ์ƒ‰)
  • ์žฅ์ : ํƒ์ƒ‰ ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Œ

์ด์ง„ ํŠธ๋ฆฌ์™€ ์ •๋ ฌ๋œ ๋ฐฐ์—ด๊ฐ„์˜ ํƒ์ƒ‰ ๋น„๊ต ๐Ÿ”ฅ

  • steps: ๋‹จ๊ณ„์˜ ๊ฐ€์ง“์ˆ˜๋ฅผ ๋ณด๋ฉด ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๋‹ค

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ

(์ถœ์ฒ˜: https://www.mathwarehouse.com/programming/gifs/binary-search-tree.php#binary-search-tree-insertion-node)


ํž™

ํž™(Heap) ์ด๋ž€?

  • ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํž™: ๋ฐ์ดํ„ฐ์—์„œ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete Binary Tree)
  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ: ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ ์ตœํ•˜๋‹จ์˜ ์™ผ์ชฝ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์‚ฝ์ž…ํ•˜๋Š” ํŠธ๋ฆฌ
  • ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ณ€ํ˜•๋œ ์ •์ฑ…์„ ์“ฐ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ
  • js์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์—์„œ ๊ฐ์ฒด๋ฅผ ๋‹ด์•„๋‘๋Š” ๊ณต๊ฐ„์ธ Heap ๋ฉ”๋ชจ๋ฆฌ์™€ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ์˜ Heap์€ ๋‹ค๋ฆ„ ๐Ÿ”ฅ

๋ฉ”๋ชจ๋ฆฌ์˜ ํž™?

์ถœ์ฒ˜: http://sjkitpro.blogspot.com/2018/07/heap.html

๋ฉ”๋ชจ๋ฆฌ ํž™(Heap)

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 4๊ฐœ์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

์ด์ค‘ Heap ์˜์—ญ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ ํ• ๋‹น์„ ํ•  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.

C์–ธ์–ด์—์„œ๋Š” malloc, java์—์„œ๋Š” new ํ‚ค์›Œ๋“œ๋กœ Heap ์˜์—ญ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

Heap ๋ฉ”๋ชจ๋ฆฌ์˜ ํ•ด์ œ๋Š” C์—์„œ๋Š” free ํ•จ์ˆ˜๋กœ ํ•ด์ œํ•˜๋ฉฐ, java์—์„œ๋Š” JVM์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ง€์šฐ๋Š” ์‹œ์ ์— ํ•ด์ œ๋œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์˜ ํž™

์ž๋ฃŒ๊ตฌ์กฐ์˜ ํž™(Heap)

ํž™์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค. ์ตœ์†Œ ๊ฐ’ ํ˜น์€ ์ตœ๋Œ€ ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์— ์ ํ•ฉํ•˜๋‹ค.

ํž™์—๋Š” ์ตœ์†Œ ํž™๊ณผ ์ตœ๋Œ€ ํž™์ด ์žˆ๋‹ค. ์ตœ๋Œ€ ํž™์€ ๋ฃจํŠธ๋…ธ๋“œ๋กœ ๊ฐˆ์ˆ˜๋ก ๊ฐ’์ด ์ปค์ง€๋ฉฐ, ์ตœ์†Œ ํž™์€ ๋ฃจํŠธ๋…ธ๋“œ๋กœ ๊ฐˆ์ˆ˜๋ก ๊ฐ’์ด ์ž‘์•„์ง„๋‹ค.

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

์ž๋ฃŒ๊ตฌ์กฐ ํž™

  • ํž™์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

    • ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์œผ๋ ค๋ฉด O(n)์ด ๊ฑธ๋ฆฐ๋‹ค (์ „์ฒด๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ)
    • ์ด์— ๋ฐ˜ํ•ด, ํž™์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์œผ๋ฉด $ O(log n) $ ์ด ๊ฑธ๋ฆผ
    • ์šฐ์„  ์ˆœ์œ„ ํ์™€ ๊ฐ™์ด ์ตœ๋Œ€๊ฐ’ ๋˜๋Š” ์ตœ์†Œ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„์•ผ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ ๋“ฑ์— ํ™œ์šฉ๋จ

์‹œ๊ฐ„ ๋ณต์žก๋„ ์ˆœ์„œ

O(1) < O( ๐‘™๐‘œ๐‘”๐‘› ) < O(n) < O(n ๐‘™๐‘œ๐‘”๐‘› ) < O( ๐‘›2 ) < O( 2๐‘› ) < O(n!)

ํž™(Heap) ๊ตฌ์กฐ

  • ํž™์€ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ (์ตœ๋Œ€ ํž™, Max Heap)์™€, ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ (์ตœ์†Œ ํž™, Min Heap)๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Œ
  • ํž™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด๐Ÿ”ฅ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž„

โ‘  ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’์€ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง„ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. (์ตœ๋Œ€ ํž™์˜ ๊ฒฝ์šฐ) - ์ตœ์†Œ ํž™์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’์€ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง„ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ž‘์Œ

โ‘ก ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค

ํž™๊ณผ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST, Binary Search Tree)์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์  ๐Ÿ”ฅ

  • ๊ณตํ†ต์ : ํž™๊ณผ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋ชจ๋‘ ์ด์ง„ ํŠธ๋ฆฌ์ž„ (์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ 2๊ฐœ๊ฐ€ ์žˆ๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ)

  • ์ฐจ์ด์ :

    • ํž™์€ ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ(Max Heap์˜ ๊ฒฝ์šฐ)
    • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘๊ณ , ๊ทธ ๋‹ค์Œ ๋ถ€๋ชจ ๋…ธ๋“œ, ๊ทธ ๋‹ค์Œ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ ๊ฐ’์ด ๊ฐ€์žฅ ํผ
    • ํž™์€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์กฐ๊ฑด์ธ ์ž์‹ ๋…ธ๋“œ์—์„œ ์ž‘์€ ๊ฐ’์€ ์™ผ์ชฝ, ํฐ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์ด๋ผ๋Š” ์กฐ๊ฑด์€ ์—†์Œ
    • ํž™์€ ์™ผ์ชฝ ๋ฐ ์˜ค๋ฅธ์กฑ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์ด ํด ์ˆ˜๋„ ์žˆ๊ณ , ์™ผ์ชฝ์ด ํด ์ˆ˜๋„ ์žˆ์Œ
    • ์กฐ๊ฑด์„ ์ •ํ•ด๋‘” ๊ฒƒ์ด ์—†๋‹ค๋Š” ๋œป(ํž™ ๊ตฌ์กฐ์— ๋“ค์–ด์˜ค๋ฉด์„œ ํŒ๋ณ„ํ•œ๋‹ค)
    • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๋ชฉ์ ์€ ํƒ์ƒ‰์„ ์œ„ํ•œ ๊ตฌ์กฐ์ด๋‹ค (๊ฐ’์˜ ์œ ๋ฌด ํŒ๋ณ„)
    • ํž™์€ ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ์ดํ•ดํ•˜๋ฉด ๋จ (๋ฃจํŠธ ๋…ธ๋“œ์—๋Š” ํ•ญ์ƒ ์ตœ๋Œ€/์ตœ์†Œ ๊ฐ’์ด ์กด์žฌํ•˜๋ฏ€๋กœ)

ํž™๊ณผ BST์˜ ์ฐจ์ด


๊ทธ๋ž˜ํ”„

๊ทธ๋ž˜ํ”„ (Graph) ๋ž€?

  • ๊ทธ๋ž˜ํ”„๋Š” ์‹ค์ œ ์„ธ๊ณ„์˜ ํ˜„์ƒ์ด๋‚˜ ์‚ฌ๋ฌผ์„ ์ •์ (Vertex) ๋˜๋Š” ๋…ธ๋“œ(Node)์™€ ๊ฐ„์„ (Edge)๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ์˜ˆ์ œ ์ง‘์—์„œ ํšŒ์‚ฌ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•œ ์˜ˆ

๊ทธ๋ž˜ํ”„

๊ทธ๋ž˜ํ”„ (Graph) ๊ด€๋ จ ์šฉ์–ด

๋…ธ๋“œ(Node) = ์ •์ (Vertex): ์œ„์น˜๋ฅผ ๋งํ•จ

๊ฐ„์„ (Edge) = ๋งํฌ = ๋ธŒ๋žœ์น˜: ์œ„์น˜ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œ์‹œํ•œ ์„ ์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•œ ์„ ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋จ (link ๋˜๋Š” branch๋ผ๊ณ ๋„ ํ•จ)

์ธ์ ‘ ์ •์ (Adjacent Vertex): ๊ฐ„์„ ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ์ •์ (๋˜๋Š” ๋…ธ๋“œ)

๋ˆˆ์—ฌ๊ฒจ ๋ณผ ๊ทธ๋ž˜ํ”„ ์ข…๋ฅ˜

  • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„
  • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„
  • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„

๊ทธ๋ž˜ํ”„ (Graph) ์ข…๋ฅ˜

๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

  • ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„
  • ๊ฐ„์„ ์„ ํ†ตํ•ด, ๋…ธ๋“œ๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์Œ
  • ๋ณดํ†ต ๋…ธ๋“œ A,B๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ (A,B) ๋˜๋Š” (B,A)๋กœ ํ‘œ๊ธฐ


๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ (Directed Graph)

  • ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„
  • ๋ณดํ†ต ๋…ธ๋“œ A, B๊ฐ€ A -> B ๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, <A, B> ๋กœ ํ‘œ๊ธฐ (<B, A> ๋Š” B -> A ๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ <A, B> ์™€ ๋‹ค๋ฆ„)


๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„ (Weighted Graph) ๋˜๋Š” ๋„คํŠธ์›Œํฌ (Network)

  • ๊ฐ„์„ ์— ๋น„์šฉ ๋˜๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ํ• ๋‹น๋œ ๊ทธ๋ž˜ํ”„


์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ (Connected Graph) ์™€ ๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ (Disconnected Graph)

  • ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ (Connected Graph)

    • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด ํ•ญ์ƒ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
  • ๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ (Disconnected Graph)

    • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ํŠน์ • ๋…ธ๋“œ์— ๋Œ€ํ•ด ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ ์˜ˆ์‹œ ์ด๋ฏธ์ง€


์‚ฌ์ดํด (Cycle) ๊ณผ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ (Acyclic Graph)

  • ์‚ฌ์ดํด (Cycle)

    • ๋‹จ์ˆœ ๊ฒฝ๋กœ์˜ ์‹œ์ž‘ ๋…ธ๋“œ์™€ ์ข…๋ฃŒ ๋…ธ๋“œ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ
  • ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ (Acyclic Graph)

    • ์‚ฌ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„

๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ ์˜ˆ


์™„์ „ ๊ทธ๋ž˜ํ”„ (Complete Graph)

  • ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„

์™„์ „ ๊ทธ๋ž˜ํ”„ ์˜ˆ


๊ทธ๋ž˜ํ”„์™€ ํŠธ๋ฆฌ์˜ ์ฐจ์ด

ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„ ์ค‘์— ์†ํ•œ ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ (ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค)

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