1. Basic Concepts

1. Introduction

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ์˜ System Life Cycle์„ ์„ค๋ช…

๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ๋‹ค์Œ 5๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฆ„:
1. Requirement (์š”๊ตฌ์‚ฌํ•ญ: ์ž…๋ ฅ/์ถœ๋ ฅ ์ •์˜)
2. Analysis (๋ฌธ์ œ ๋ถ„ํ•ด: manageable sub-problems๋กœ ๋‚˜๋ˆ”)
3. Design (ADT์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์ค€์˜ ์„ค๊ณ„)
4. Coding (๊ตฌํ˜„)
5. Verification (๊ฒ€์ฆ, ํ…Œ์ŠคํŠธ ๋ฐ ์˜ค๋ฅ˜ ์ œ๊ฑฐ)

2. Algorithms

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •์˜: ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์œ ํ•œ ๊ฐœ์˜ ๋ช…๋ น์–ด ์ง‘ํ•ฉ

์กฐ๊ฑด:
โ€ข ์ž…๋ ฅ (0๊ฐœ ์ด์ƒ)
โ€ข ์ถœ๋ ฅ (์ตœ์†Œ 1๊ฐœ)
โ€ข ๋ช…ํ™•์„ฑ (Definiteness)
โ€ข ์œ ํ•œ์„ฑ (Finiteness)
โ€ข ํšจ๊ณผ์„ฑ (Effectiveness)

์•Œ๊ณ ๋ฆฌ์ฆ˜ โ‰  ํ”„๋กœ๊ทธ๋žจ
(์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐœ๋…์  ๋‹จ๊ณ„, ํ”„๋กœ๊ทธ๋žจ์€ ๊ตฌ์ฒด์  ๊ตฌํ˜„)


3. Pseudo Code

์ฝ”๋“œ ์œ ์‚ฌ ํ˜•์‹์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‘œํ˜„ ๋ฐฉ๋ฒ• (์˜์–ด+ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋…ผ๋ฆฌ ํ˜ผํ•ฉ)

์žฅ์ :
  • ์–ธ์–ด ๋…๋ฆฝ์ 
  • ๋กœ์ง ์„ค๊ณ„์— ์ง‘์ค‘ ๊ฐ€๋Šฅ
3๊ฐ€์ง€ ๊ตฌ์กฐ:
  • ์ˆœ์ฐจ (Sequence)
  • ์„ ํƒ (Selection)
  • ๋ฐ˜๋ณต (Loop)

์‹ค์ œ ์‹คํ–‰์€ ์•ˆ ๋˜์ง€๋งŒ, ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋กœ ํ™œ์šฉ๋จ


4. Abstract Data Type (ADT)

ADT๋ž€?: ๋ฐ์ดํ„ฐ + ๊ทธ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์˜ ์ง‘ํ•ฉ์„ ์ถ”์ƒ์ ์œผ๋กœ ์ •์˜

โ€œ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€โ€์— ์ง‘์ค‘ (What it does)

๋‚ด๋ถ€ ํ‘œํ˜„๊ณผ ๊ตฌํ˜„์€ ์ˆจ๊น€ (How it is done)

์˜ˆ์‹œ:
โ€ข ์ž์—ฐ์ˆ˜ ADT: Add, Subtract, Is_Zero ๋“ฑ
โ€ข ๋ฆฌ์ŠคํŠธ ADT: insert, retrieve ๋“ฑ

5. ADT Implementations

ADT๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋Œ€ํ‘œ ๋ฐฉ์‹:
  1. Array ๊ธฐ๋ฐ˜: ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•œ ์ˆœ์ฐจ์  ์ ‘๊ทผ
  2. Linked List ๊ธฐ๋ฐ˜: ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ๋™์  ์—ฐ๊ฒฐ ๊ตฌ์กฐ


๊ด€๋ จ ๊ฐœ๋…:
  • ํฌ์ธํ„ฐ (Pointer)
  • ๊ตฌ์กฐ์ฒด (Structure)
  • self-referential ๊ตฌ์กฐ (struct Node { int data; struct Node *next; })

์„ ํ˜• ๋ฆฌ์ŠคํŠธ์™€ ๋น„์„ ํ˜• ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„๋„ ์†Œ๊ฐœ๋จ


6. Generic Code for ADTโ€™s

๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด ์ผ๋ฐ˜ํ™”๋œ ๊ตฌํ˜„์ด ํ•„์š”ํ•จ

C์–ธ์–ด์—์„œ์˜ ๋ฐฉ๋ฒ•:
  • void* ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ์ž๋ฃŒํ˜• ๋…๋ฆฝ์„ฑ
  • function pointer๋ฅผ ํ†ตํ•œ ์—ฐ์‚ฐ ์ผ๋ฐ˜ํ™”

C++, Java์—์„œ๋Š” ํ…œํ”Œ๋ฆฟ(generic programming) ์ง€์›์œผ๋กœ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

์˜ˆ์‹œ:
  • void* createNode(void* itemPtr);

  • ๋น„๊ต ํ•จ์ˆ˜ ํฌ์ธํ„ฐ: int (compare)(void, void*)


7. Algorithm Efficiency

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ์ˆ˜ํ•™์ ์œผ๋กœ ๋ถ„์„

๋ณต์žก๋„ ํ‘œ๊ธฐ: ์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„, ํŠนํžˆ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„

๋ถ„์„ ๋ฐฉ๋ฒ•:
โ€ข ๋ฐ˜๋ณต๋ฌธ (linear: O(n), quadratic: O(nยฒ), logarithmic: O(log n) ๋“ฑ)
โ€ข ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ (nested loop)์˜ ์ด ์ˆ˜ํ–‰ ํšŸ์ˆ˜ ๊ณ„์‚ฐ

Big-O ํ‘œ๊ธฐ๋ฒ•: ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ณต์žก๋„ ํ‘œํ˜„

  • O(1), O(n), O(log n), O(n log n), O(nยฒ), O(2โฟ), O(n!) ๋“ฑ

ํ•ต์‹ฌ: ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ฐจ์ˆ˜(์ง€์ˆ˜)์˜ ์ฐจ์ด๊ฐ€ ํ›จ์”ฌ ์ค‘์š”ํ•˜๋ฉฐ, ์ƒ์ˆ˜ ๊ณ„์ˆ˜๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Œ

๊ฒฐ๋ก 

์ด Agenda๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ˆ˜์—…์˜ ๊ธฐ๋ฐ˜์„ ํ˜•์„ฑํ•˜๋Š” ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ์„œ, ๋‹จ์ˆœํžˆ ์ฝ”๋“œ ๊ตฌํ˜„์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ ˆ์ฐจ, ์ถ”์ƒํ™”, ์„ฑ๋Šฅ ๋ถ„์„๊นŒ์ง€ ํฌํ•จํ•˜๋Š” ์ „๋ฐ˜์ ์ธ ์„ค๊ณ„ ์ฒ ํ•™์„ ๋‹ด๊ณ  ์žˆ๋‹ค.


System Life Cycle: Problem ->Problem solving -> Solution

Problem Solving๋‹จ๊ณ„(4๋‹จ๊ณ„)

  1. Requirement (์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„)
    • ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ์ •์˜
    • ๋ฌธ์ œ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ ๋˜๋Š” ์กฐ๊ฑด๋“ค์„ ๋ช…ํ™•ํžˆ ์„ค์ •
  2. Analysis (๋ถ„ํ•ด ๋ถ„์„)
    • ๋ฌธ์ œ๋ฅผ ๋” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์ดํ•ด
    • ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ํŒŒ์•…
  3. Design (์„ค๊ณ„)
    • ์ถ”์ƒ ์ž๋ฃŒํ˜•(ADT), ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„
    • ํšจ์œจ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์„ค๊ณ„
  4. Coding(์ฝ”๋”ฉ)
    • ์„ค๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ์ž‘์„ฑ

Solution: Program Code

์ดํ›„ ๋‹จ๊ณ„

  1. Verification(๊ฒ€์ฆ)
    • ํ”„๋กœ๊ทธ๋žจ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ
    • ์š”๊ตฌ์‚ฌํ•ญ์„ ์ œ๋Œ€๋กœ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธ

์ด ํ๋ฆ„์€ ์ „ํ˜•์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ ˆ์ฐจ๋กœ์จ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•  ๋•Œ๋„ ์ด๋Ÿฐ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

Leave a comment