Computer Science

๊ฒ€์ƒ‰๊ฒฐ๊ณผ 14 ๊ฐœ
[CS ๊ธฐ์ดˆ] ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ปดํ“จํ„ฐ๊ณผํ•™(CS50) - 2. C์–ธ์–ด(2)

C์–ธ์–ด ๊ธฐ์ดˆ ๋ฌธ๋ฒ• C๋Š” ์•„์ฃผ ์˜ค๋ž˜๋˜๊ณ  ์ „ํ†ต์ ์ธ ์ˆœ์ˆ˜ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด์ด๋‹ค. ๋‹ค์Œ ์ฐฝ์˜ ์–ธ์–ด๋ฅผ ์ดํ•ดํ•ด๋ณด์ž. #include int main(void) { printf("hello, world\n"); } int main(void){} '์‹œ์ž‘ํ•œ๋‹ค'์˜ ์˜๋ฏธ. ์•ž์œผ๋กœ ์ž‘์„ฑํ•  ์ฝ”๋“œ ๋ชจ๋‘๋Š” ์ด int main(void) { }์˜ ์ค‘๊ด„ํ˜ธ ์‚ฌ์ด์— ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. printf(); ์Šคํฌ๋ž˜์น˜์˜ “‘say” ๋ธ”๋ก๊ณผ ๊ฐ™์€ ์—ญํ•  ๋ฌธ์ž์—ด์„ ์ ์„ ๋•Œ์—๋Š” ์–ธ์ œ๋‚˜ ํ…์ŠคํŠธ๋ฅผ " " ์Œ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ผ๋‹ค. ์ผ์ƒ์—์„œ ๋ฌธ์žฅ์˜ ๋์— ๋งˆ์นจํ‘œ(.)๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ C์—์„œ๋Š” ์„ธ๋ฏธ์ฝœ๋ก (;)์„ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค. \n ์ค„๋ฐ”๊ฟˆ. ํ‚ค๋ณด๋“œ์˜ enter์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ #include “stdio.h”๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ์ฐพ์•„์„œ “printf” ํ•จ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก..

[CS ๊ธฐ์ดˆ] ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ปดํ“จํ„ฐ๊ณผํ•™(CS50) - 2. C์–ธ์–ด

CS50 Sandbox * CS50 ๊ฐ•์ขŒ๋‚ด ์‹ค์Šต์—์„œ ์‚ฌ์šฉ๋˜๋Š” CS50 Sandbox : https://sandbox.cs50.io CS50 Sandbox Temporary programming environments for students and teachers. sandbox.cs50.io CS50 Sandbox์—์„œ ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ 1. ์™ผ์ชฝ ์ƒ๋‹จ์— ์žˆ๋Š” + ๋ฒ„ํŠผ์„ ํด๋ฆญ 2. ํŒŒ์ผ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  Create File์„ ํด๋ฆญ ์ด ๋•Œ C์˜ ํ™•์žฅ์ž์ธ .c๋ฅผ ๊ผญ ๋์— ์ ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 3. ์™ผ์ชฝ์— ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. 4. clang ํŒŒ์ผ์ด๋ฆ„.c ๋ฅผ ์‹คํ–‰ ์‹คํ–‰์ด ๋˜์—ˆ๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์™ผ์ชฝ์— a.out์ด ์ƒ์„ฑ๋จ ๋ณด์ด์ง€ ์•Š์œผ๋ฉด → ํด๋”๋ชจ์–‘์˜ ์•„์ด์ฝ˜ ํด๋ฆญ 5. ๊ฒฐ๊ณผ ํŒŒ์ผ ์ด๋ฆ„์„ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์— ๊ฒฐ๊ณผ ๊ฐ’์ด ์ถœ๋ ฅ๋จ ์ปดํŒŒ..

[CS ๊ธฐ์ดˆ] ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ปดํ“จํ„ฐ๊ณผํ•™(CS50) - 1. ์ปดํ“จํŒ… ์‚ฌ๊ณ 

Bit vs Byte Bit ๋น„ํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํ“จํ„ฐ๊ฐ€ ์“ฐ๋Š” ์ธก์ • ๋‹จ์œ„ ์ด์ง„ ์ˆซ์ž๋ผ๋Š” ๋œป์„ ๊ฐ€์ง„ “binary digit”์˜ ์ค„์ž„๋ง 0๊ณผ 1, ๋‘ ๊ฐ€์ง€ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ธก์ • ๋‹จ์œ„ ๋””์ง€ํ„ธ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋น„ํŠธ๋“ค๋กœ ๋‚˜ํƒ€๋ƒ„์œผ๋กœ์จ ๋‘ ๊ฐ€์ง€ ๊ฐ’๋งŒ์„ ๊ฐ€์ง€๊ณ ๋„ ๋งŽ์€ ์–‘์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์ปดํ“จํ„ฐ๋Š” ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋น„ํŠธ์— ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Byte ๋ฐ”์ดํŠธ. ๋น„ํŠธ์—ด์˜ ์ผ์ข… ๋น„ํŠธ ํ•œ ๊ฐœ๋Š” ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ์— ๋ถ€์กฑ → ์—ฌ๋Ÿฌ ์ˆซ์ž ์กฐํ•ฉ์„ ์ปดํ“จํ„ฐ์— ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด ๋น„ํŠธ์—ด ๋ฐ”์ดํŠธ(byte) : ์—ฌ๋Ÿ ๊ฐœ์˜ ๋น„ํŠธ๊ฐ€ ๋ชจ์—ฌ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ ํ•˜๋‚˜์˜ ๋ฐ”์ดํŠธ์— ์—ฌ๋Ÿ ๊ฐœ์˜ ๋น„ํŠธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 2^8 = 256 ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ”์ดํŠธ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ..

[Algorithm | Python] ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ - BFS, DFS ๊ฐœ๋… ์ •๋ฆฌ

DFS์™€ BFS ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ฐœ๋…์„ ์ตํ˜”๋‹ค ํ•ด๋„ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ’€์ด์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ฒ˜์Œ์—๋Š” ์‰ฝ์ง€ ์•Š์€๋ฐ, ๊ณ„์† ํ’€๋‹ค ๋ณด๋‹ˆ ์ „ํ˜•์ ์ธ ํ’€์ด ํŒจํ„ด์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์ธ BFS, DFS ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ๐Ÿ“Œ ๊ฒฐ๊ตญ DFS, BFS์˜ ๊ธฐ๋ณธ ์ž‘๋™ ์›๋ฆฌ๋Š” ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ ๋ฐฉ๋ฌธ+๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ → ์ธ์ ‘ ๋…ธ๋“œ ๋ฐฉ๋ฌธ+๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ์ด๋‹ค. (*๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์ด์œ  : ๊ฐ™์€ ๋…ธ๋“œ๋ฅผ ์ค‘๋ณตํ•ด์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•จ) ๐Ÿ“Œ ๋‹จ, LIFO(Last-In First-Out)์ธ stack๊ณผ stack memory๋ฅผ ํ™œ์šฉํ•˜๋Š” recursion(์žฌ๊ท€) ↔ FIFO(First-In First-Out)์ธ queue์˜ ํŠน์„ฑ์ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ท€๊ฒฐ๋œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ์‰ฝ๊ฒ ๋‹ค. ๊ฐœ๋… DFS๋ž€? Depth-First Search ..

[์ž๋ฃŒ๊ตฌ์กฐ] ๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ (Red Black Tree)

Red Black Tree ๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ ๋ ˆ๋“œ๋ธ”๋ž™ ํŠธ๋ฆฌ๋Š” ์ž๊ฐ€๊ท ํ˜•์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ(self-balancing binary search tree)๋กœ์จ, ๋Œ€ํ‘œ์ ์œผ๋กœ ์—ฐ๊ด€๋ฐฐ์—ด(associative array) ๋“ฑ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋Š” ๋ณต์žกํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด์ง€๋งŒ, ์‹ค ์‚ฌ์šฉ์—์„œ ํšจ์œจ์ ์ด๊ณ , ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์ƒ๋‹นํžˆ ์šฐ์ˆ˜ํ•œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋ณด์ธ๋‹ค. ํŠธ๋ฆฌ์— n๊ฐœ์˜ ์›์†Œ๊ฐ€ ์žˆ์„๋•Œ Θ(log n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋นจ๊ฐ„์ƒ‰ ํ˜น์€ ๊ฒ€์€์ƒ‰์ธ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ๋ชจ๋“  ์†์„ฑ์€ Extended Binary Search Tree*๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค : ๊ฐ Null ํฌ์ธํ„ฐ๋Š” ์™ธ๋ถ€ ๋…ธ๋“œ(External node)๋กœ ๋ฐ”๋€œ Black child(์™ธ๋ถ€ ๋…ธ๋“œ ํฌํ•จ)์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋Š” ๊ฒ€์€..

[์ž๋ฃŒ๊ตฌ์กฐ] AVLํŠธ๋ฆฌ (AVL Tree)

์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ๋Š” ์ €์žฅ๊ณผ ๊ฒ€์ƒ‰์— ํ‰๊ท  Θ(log n)์‹œ๊ฐ„์ด ์†Œ์š”๋˜์ง€๋งŒ ์šด์ด ๋‚˜์˜๋ฉด ํŠธ๋ฆฌ์˜ ๋ชจ์–‘์ด ๊ท ํ˜•์„ ์ž˜ ์ด๋ฃจ์ง€ ๋ชปํ•œ๋‹ค. ๊ท ํ˜•์ด ๋งŽ์ด ๊นจ์ง€๋ฉด Θ(n)์— ๊ทผ์ ‘ํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ ์•ˆํ•ด ๋‚ธ ๊ฒƒ์ด **๊ท ํ˜•์žกํžŒ ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ(Balanced Binary Search Tree)**์ด๋‹ค. ๊ท ํ˜•์žกํžŒ ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์ด์ง„ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ์ž˜ ๋งž๋„๋ก ์œ ์ง€ํ•œ๋‹ค. ๊ท ํ˜•์žกํžŒ ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ๋กœ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์€ AVLํŠธ๋ฆฌ์™€ ๋ ˆ๋“œ๋ธ”๋ž™ํŠธ๋ฆฌ๋‹ค. AVL Tree Adelson-Velsky and Landis Tree ๊ทน๋‹จ์ ์œผ๋กœ๋Š” n๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์ผ๋ ฌ๋กœ ๋Š˜์–ด๋œจ๋ ค์ ธ ๋†’์ด ๋˜ํ•œ n์ด ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์— ํ•ด๋‹น๋œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ณ„์‚ฐ๋ณต์žก์„ฑ์€ O(n)์ด ๋˜๋Š”๋ฐ, ์ด๊ฒƒ์œผ๋กœ๋Š” ํƒ์ƒ‰ ์†๋„๊ฐ€ O(..

[์ž๋ฃŒ๊ตฌ์กฐ] ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(Binary Search Tree)

๐Ÿ’ก ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๋ณด๋‹ค๋Š” ํƒ์ƒ‰์— ์ฃผ ๋ชฉ์ ์„ ๋‘” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. Search Tree ํƒ์ƒ‰ ํŠธ๋ฆฌ skip lists์™€ hash table๋“ค๊ณผ ๊ฐ™๊ฑฐ๋‚˜ ๊ทธ ์ด์ƒ์˜ ์„ฑ๋Šฅ์„ ๊ฐ€์ง ์‚ฌ์ „์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ์— ์ด์ƒ์ ์ธ ๊ตฌ์กฐ ์ˆœ์ฐจ์  ๋˜๋Š” ๋“ฑ๊ธ‰๋ณ„ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์— ์ด์ƒ์  ๐Ÿ’ก ๋นˆ์ถœ! ์ด์ง„ ํŠธ๋ฆฌ์™€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์ฐจ์ด์  - ์ด์ง„ ํŠธ๋ฆฌ : ๋…ธ๋“œ์˜ ์ตœ๋Œ€ Branch๊ฐ€ 2์ธ ํŠธ๋ฆฌ - ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ : ์ด์ง„ ํŠธ๋ฆฌ์— ์ถ”๊ฐ€์ ์ธ ์กฐ๊ฑด์ด ์žˆ๋Š” ํŠธ๋ฆฌ ⇒ ์กฐ๊ฑด : ์™ผ์ชฝ ๋…ธ๋“œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’, ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ. Binary Search Tree ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ํŠธ๋ฆฌ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ๋งŒ์กฑํ•œ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ x์— ๋Œ€ํ•˜์—ฌ,์˜ค๋ฅธ์ชฝ ์„œ..

[์ž๋ฃŒ๊ตฌ์กฐ] ์Šค๋ ˆ๋“œ ์ด์ง„ ํŠธ๋ฆฌ (Threaded Binary Tree)

Threaded Binary Tree์˜ ํŠน์ง• ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ฑ„์›Œ์ง„๋‹ค. ํŠธ๋ฆฌ์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋Œ€ํ•œ thread๋ผ๋Š” ํฌ์ธํ„ฐ๋กœ null ๋งํฌ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค ์ž์‹ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š” ๋งํฌ๋Š” ์ค‘์œ„ ์„ ํ–‰์ž (Inorder Predecessor) ๋˜๋Š” ์ค‘์œ„ ํ›„ํ–‰์ž (Inoder Successor)์™€ ์—ฐ๊ฒฐ๋œ๋‹ค. ์ค‘์œ„ ์„ ํ–‰์ž ๋˜๋Š” ์ค‘์œ„ ํ›„ํ–‰์ž๊ฐ€ ์—†๋Š” ๋…ธ๋“œ์˜ ๋งํฌ๋Š” ๊ฐ€์ƒ์˜ ๋…ธ๋“œ head๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์žฅ์  : ํŠธ๋ฆฌ ์ „์ฒด์˜ ๋ชจ๋“  ๋งํฌ๋ฅผ ํ™œ์šฉํ•œ๋‹ค. ์ค‘์œ„ ์ˆœํšŒ์˜ ํŽธ์˜์„ฑ์ด ์ฆ๋Œ€๋œ๋‹ค. Thread์˜ ์ด์šฉ ptr -> leftChild = null์ธ ๊ฒฝ์šฐ, ptr → left_child๋ฅผ ptr์˜ ์ค‘์œ„ ์„ ํ–‰์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝ ์ค‘์œ„ ์„ ํ–‰์ž(Inorder Predecessor): ํ•ด๋‹น ๋…ธ๋“œ ๋ฐ”๋กœ ์•ž์— ๋‚˜์˜จ ๋…ธ๋“œ ptr -> rig..