์šด์˜์ฒด์ œ: ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด ์‹คํ–‰์ค‘์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ (program in execution)์„ ๋งํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ €์žฅ์žฅ์น˜์— ์ €์žฅ๋˜์–ด ์•„๋ฌด์ผ๋„ ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ์ด๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ job, task ๋“ฑ์œผ๋กœ ๋งํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค ์ƒํƒœ New : ์ €์žฅ์žฅ์น˜๋กœ ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•œ ๊ฒฝ์šฐ์ด๋‹ค. Ready : New ์ƒํƒœ์—์„œ ์ดˆ๊ธฐํ™” ๊ณผ์ • ํ›„ ์‹คํ–‰ํ•  ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜, Running ์ƒํƒœ์—์„œ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์ด๋‹ค. Running : ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ์— ์‹คํ–‰๋  ํ”„๋กœ์„ธ์Šค๋กœ ์„ ํƒ๋œ ๊ฒฝ์šฐ Running ์ƒํƒœ๋กœ ๋ฐ”๋€Œ์–ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Wating : I/O์™€ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์ง€์—ฐ์‹œ๊ฐ„์ด ํฌ๋ฏ€๋กœ ์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ Waiting ์ƒํƒœ ํ›„ ๋‹ค์‹œ Ready๋กœ ๊ฐ„๋‹ค. Terminated : ํ”„๋กœ์„ธ์Šค๋ฅผ ..

์šด์˜์ฒด์ œ: ์ด์ค‘๋ชจ๋“œ ๋ฐ ํ•˜๋“œ์›จ์–ด ๋ณดํ˜ธ

์šด์˜์ฒด์ œ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„์˜ ๊ถŒํ•œ์„ ํ™•์ธํ•˜์ง€ ์•Š๊ณ , ํŒŒ์ผ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์•…์˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ํƒ€์ธ์˜ ์ €์žฅ๊ณต๊ฐ„์„ ์นจ๋ฒ”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์†์‹ค์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค. ๋˜ํ•œ, ์šด์˜์ฒด์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๋ช…๋ น์–ด์™€ ๊ฐ™์€ ์‹คํ–‰์‹œ ์น˜๋ช…์ ์ธ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ๋„ ๋น„์Šทํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. Dual Mode ์šด์˜์ฒด์ œ๋Š” ํŠน๊ถŒ ๋ช…๋ น(Privileged Instructions)์„ ์ง€์ •ํ•˜๊ณ  ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰์•˜๋‹ค. Applications์—์„œ ํŠน๊ถŒ ๋ช…๋ น ์‚ฌ์šฉ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ kernel mode์— ์ง„์ž… ํ›„, ์šด์˜์ฒด์ œ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. (ํŠน๊ถŒ ๋ช…๋ น์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ kernel mode์™€ ๋ฐ˜๋Œ€์ธ user mode๋Š” CPU ๋ ˆ์ง€์Šคํ„ฐ์—..

์šด์˜์ฒด์ œ: ์ •์˜์™€ ์—ญํ• 

์šด์˜์ฒด์ œ๋ž€? ์šด์˜์ฒด์ œ๋Š” ์ปดํ“จํ„ฐ์˜ ์ž์›๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค. ๋‹ค์–‘ํ•œ ํ•˜๋“œ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๊ฒฝ์šฐ ์ ์ ˆํžˆ ์‹คํ–‰๋˜๋„๋ก ๊ด€๋ฆฌํ•œ๋‹ค. ์ฆ‰, ์ปดํ“จํ„ฐ์˜ ํ•˜๋“œ์›จ์–ด์˜ ๊ด€๋ฆฌ์™€ ์‚ฌ์šฉ์ž๊ฐ€ ์ ์‹œ์ ์žฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ถ€ํŒ…(Booting) ์ปดํ“จํ„ฐ ๋ถ€ํŒ… ๊ณผ์ •์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค. ์ฒซ๋ฒˆ์งธ๋Š” POST(Power-On-Self-Test)๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ์˜ ๊ฐ ์žฅ์น˜์— ๋Œ€ํ•œ ์ ๊ฒ€์„ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ๋‘๋ฒˆ์งธ๋Š” ๋ถ€ํŠธ๋กœ๋”(Boot loader)๋ฅผ ํ†ตํ•ด ์ €์žฅ์žฅ์น˜ ๋‚ด์— ์šด์˜์ฒด์ œ์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ์œ„์˜ ๊ณผ์ •์„ ๋งˆ์น˜๊ฒŒ ๋˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ์šด์˜์ฒด์ œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์šด์˜์ฒด์ œ์˜ ๊ณ„์ธต์  ์œ„์น˜ ์šด์˜์ฒด์ œ์˜ ๊ณ„์ธต์ ..

์•Œ๊ณ ๋ฆฌ์ฆ˜: ์ •๋ ฌ

์ •๋ ฌ ๋ฐฉ์‹ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ ฌ ๋ฐฉ์‹์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ 2์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” Bubble, Select, Insert ์ •๋ ฌ์ด๋‹ค. ๋‘ ๋ฒˆ์งธ๋Š” ๋ถ„ํ• -์ •๋ณต ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ณ‘ํ•ฉ, ํ€ต ์ •๋ ฌ์ด๋‹ค. 2์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ ฌ ๋ฐฉ์‹ ํ•ด๋‹น ๋ฐฉ์‹์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N^2)์ด ๋œ๋‹ค. ์ด์™€ ๊ฐ™์€ ์ด์œ ๋Š” 2๊ฐœ์˜ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๊ฐ’์„ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Bubble Sort ์„œ๋กœ ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. swap์ด ๋” ์ด์ƒ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด, ์ค‘๋‹จํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. def bubble_sort(nums): for i in range(len(nums)): swap = False for j in range(1, len(nums)): if ..

์•Œ๊ณ ๋ฆฌ์ฆ˜: DFS์™€ BFS

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐฉ๋ฒ• ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ค‘ DFS(Depth First Search์™€ BFS(Breadth First Search)๋ฅผ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•˜๊ณ ์ž ํ•œ๋‹ค. ๋‘ ๋ฐฉ์‹์€ ๊ฐ๊ฐ Stack๊ณผ Queue๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜ํ”„ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜์—ฌ ์ค‘๋ณต์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜ํ”„๋ฅผ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ ๊ทธ๋ฆผ 1์˜ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. graph = { 'A': ['B', 'C'], 'B': ['A', 'D'], 'C': ['A', 'E', 'F'], 'D': ['B', 'G'], 'E': ['C', 'H'], 'F': ['C'], 'G': ['D'], 'H': ['E'], } DFS ๊ทธ๋ฆผ 2๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋ชจ๋“  ๊ทธ๋ž˜ํ”„ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜..

์•Œ๊ณ ๋ฆฌ์ฆ˜: Recursion

Recursion? ์žฌ๊ท€๋Š” ํŠน์ • ํ•จ์ˆ˜ ๋‚ด์—์„œ ํ•จ์ˆ˜ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์žฌ๊ท€๋Š” Stack์˜ ํŠน์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜ํ•˜์—ฌ, ๊ฐ€์žฅ ์ตœ๊ทผ์— ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜ ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค. ์žฌ๊ท€๋ฅผ ์ž˜ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค๋ฉด DFS์™€ ๋ฐฑํŠธ๋ž˜ํ‚น, ํŠธ๋ฆฌ ํƒ์ƒ‰๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ• ๋•Œ ํšจ์œจ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ ๊ทธ๋ฆผ 1๊ณผ ๊ฐ™์€ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, 3๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์ „์œ„ ์ˆœํšŒ๋กœ 1-2-4-5-3-6-7 ์ˆœ์„œ๋กœ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ๋Š” ์ค‘์œ„ ์ˆœํšŒ๋กœ 4-2-5-1-6-3-7 ์ˆœ์„œ๋กœ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒ ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํ›„์œ„์ˆœํšŒ๋Š” 4-5-2-6-7-3-1๋กœ ์ˆœํšŒํ•œ๋‹ค. ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ์€ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋‹ค. Simple Tree Travel de..

์ž๋ฃŒ๊ตฌ์กฐ: Linked List

Linked List? ๋‹จ์ˆœํ•œ ์„ ํ˜• ๋ฐฐ์—ด(๋ฆฌ์ŠคํŠธ)์„ ์„ ์–ธํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ํ• ๋‹นํ•œ๋‹ค. ๋งŒ์•ฝ, ๋ฐฐ์—ด ๋‚ด์˜ ๊ฐ’ ์‚ญ์ œ๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐ’๋“ค์˜ ์ž๋ฆฌ ๊ต์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด์™€ ๋‹ฌ๋ฆฌ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์—ฐ์†์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•œ ๊ตฌ์กฐ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์ค‘๊ฐ„์˜ ๊ฐ’ ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋Š” ์ž๋ฃŒ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์— ๋ณด๋‹ค ํšจ์œจ์ ์ด๋‹ค. Single Linked List class Node: def __init__(self, data): self.data = data self.next = None class SingleLinkedList: def __init__(self, data): self.head = Node(data) def add(self, data): node = self.head w..

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

Queue? ๊ฐ€์žฅ ์ฒ˜์Œ์— ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋บ„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹(First in First Out) ํ˜•์‹์˜ ์ž๋ฃŒ๊ตฌ์กฐ Queue์˜ ์—ฐ์‚ฐ enqueue(data) : data๋ฅผ Queue์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ•œ๋‹ค. dequeue() : Queue์˜ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ data๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค. peek() : pop()๊ณผ ๋‹ฌ๋ฆฌ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ data๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ œ๊ฑฐํ•˜์ง„ ์•Š๋Š”๋‹ค. is_empty() : pop()์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถ”๊ฐ€๋œ data๊ฐ€ ์กด์žฌํ•˜์—ฌ์•ผ ํ•˜๋Š”๋ฐ ์ด๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. Queue๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์„ ์ž…์„ ์ถœ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ, ์šฐ์„ ์ˆœ์œ„ ๋Œ€๊ธฐ์—ด, ํ”„๋ฆฐํ„ฐ ์ถœ๋ ฅ ์ฒ˜๋ฆฌ ๋“ฑ BFS ๊ตฌํ˜„ Queue์˜ ์„ ์ž…์„ ์ถœ ๋ฐฉ์‹์„ ํ†ตํ•ด BFS๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. DFS์˜ ๊ฒฝ์šฐ Stack์„ ์‚ฌ์šฉ..

๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€