ํ•ด์‹œ๋ž€?
ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€ํ™˜ํ•œ ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ์‚ผ์•„ ํ‚ค์™€ ๊ฐ’์„ ์ €์žฅํ•ด์„œ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ํƒ์ƒ‰์„ ์ œ๊ณตํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

 

ํ•ด์‹œ์˜ ํŠน์ง•

  • ๋‹จ๋ฐฉํ–ฅ ๋™์ž‘ (ํ‚ค๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ’์„ ํ†ตํ•ด ํ‚ค๋ฅผ ์ฐพ๊ธฐ ๋ถˆ๊ฐ€๋Šฅ)
  • ํ‚ค ์ž์ฒด๊ฐ€ ์ธ๋ฑ์Šค์ด๋ฏ€๋กœ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•œ ํƒ์ƒ‰ ๋ถˆํ•„์š”
  • ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ๋ณ€ํ™˜๊ณผ์ • ํ•„์š”

 

ํ•ด์‹œ์˜ ๋™์ž‘๋ฐฉ์‹

ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

ํ•ด์‹œ ํ…Œ์ด๋ธ”(hash table) : ํ‚ค์™€ ๋Œ€์‘ํ•œ ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณต๊ฐ„

๋ฒ„ํ‚ท(bucket) : ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ฐ ๋ฐ์ดํ„ฐ

 

ํ•ด์‹œ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜๋Š” ๋ถ„์•ผ

๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ๋Œ€์‹  ๋น ๋ฅด๊ฒŒ ์›ํ•˜๋Š” ๊ฐ’ ๊ฒ€์ƒ‰ (๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ / ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ํ™œ์šฉ)

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ด€๋ฆฌ : ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœํ•ด ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๋ฏ€๋กœ ํ•ด์‹ฑํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์‹ฑ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰
  • ๋ธ”๋ก์ฒด์ธ : ๊ฐ ๋ธ”๋ก์€ ์ด์ „ ๋ธ”๋ก์˜ ํ•ด์‹œ๊ฐ’์„ ํฌํ•จํ•˜๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ํ™•์ธ

 

ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๊ณ ๋ คํ•  ๋‚ด์šฉ

  • ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ๋ณ€ํ™˜ํ•œ ๊ฐ’์€ ์ธ๋ฑ์Šค๋กœ ํ™œ์šฉํ•ด์•ผํ•˜๋ฏ€๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ๋„˜์œผ๋ฉด ์•ˆ๋œ๋‹ค.
  • ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ๋ณ€ํ™˜ํ•œ ๊ฐ’์˜ ์ถฉ๋Œ์€ ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ๋ฐœ์ƒํ•ด์•ผ ํ•œ๋‹ค.
    (์ถฉ๋Œ : ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ํ‚ค์— ๋Œ€ํ•ด ํ•ด์‹ฑ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•œ ๊ฒƒ์„ ์˜๋ฏธ)

 

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํ•ด์‹œํ•จ์ˆ˜

1) ๋‚˜๋ˆ—์…ˆ๋ฒ• (division method)

 

โ„Ž(๐‘ฅ) = ๐‘ฅ ๐‘š๐‘œ๐‘‘ ๐‘š
  • x = ํ‚ค / m = ์†Œ์ˆ˜ 
  • ํ‚ค๋ฅผ ์†Œ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ (์ถฉ๋Œ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์†Œ์ˆ˜ ์‚ฌ์šฉ)
  • ๋‚˜๋จธ์ง€๋ฅผ ์ทจํ•˜๋Š” ์—ฐ์‚ฐ์„ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์ด๋ผ๊ณ  ํ•˜๋ฉฐ ์—ฐ์‚ฐ์ž๋กœ % ์‚ฌ์šฉ
  • m์„ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐํ–ˆ์„ ๋•Œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ 0~(m-1)์ด๋ฏ€๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋Š” m (ํฐ ์†Œ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ)

2) ๊ณฑ์…ˆ๋ฒ• (multiplication method)

 

โ„Ž(๐‘ฅ) = (((๐‘ฅ โˆ— ๐ด) ๐‘š๐‘œ๐‘‘ 1) โˆ— ๐‘š)
  • m = ์ตœ๋Œ€ ๋ฒ„ํ‚ท์˜ ๊ฐœ์ˆ˜ / A = ํ™ฉ๊ธˆ๋น„ (์ˆ˜ํ•™์ ์œผ๋กœ ์ž„์˜์˜ ๊ธธ์ด๋ฅผ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ์ „์ฒด:๊ธด ๋ถ€๋ถ„ = ๊ธด ๋ถ€๋ถ„:์งง์€ ๋ถ€๋ถ„์ธ ๋น„์œจ)
  • ๊ณฑ์…ˆ๋ฒ•์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹
    • ํ‚ค์— ํ™ฉ๊ธˆ๋น„ ๊ณฑํ•˜๊ธฐ
    • ์œ„์—์„œ ๊ตฌํ•œ ๊ฐ’์˜ ๋ชจ๋“ˆ๋Ÿฌ 1 ์ทจํ•˜๊ธฐ (์ •์ˆ˜ ๋ถ€๋ถ„์„ ๋ฒ„๋ฆฌ๊ณ  ์†Œ์ˆ˜ ๋ถ€๋ถ„ ์ทจํ•˜๊ธฐ)
    • ์œ„์—์„œ ๊ตฌํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์‹ค์ œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋งคํ•‘

 

๋ฌธ์ž์—ด ํ•ด์‹ฑ

โ„Ž๐‘Ž๐‘ โ„Ž(๐‘ ) = (๐‘ [0] + ๐‘ [1] โˆ— ๐‘ + ๐‘ [2] โˆ— ๐‘2 โ€ฆ ๐‘ [๐‘›โˆ’1] โˆ— ๐‘n-1) ๐‘š๐‘œ๐‘‘ ๐‘š
  • ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ด ์ˆซ์ž๋“ค์„ ๋‹คํ•ญ์‹์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ํ•ด์‹ฑ
  • ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ ๊ฐ’์ด ํ•ด์‹œ ํ…Œ์ด๋ธ” ํฌ๊ธฐ์— ๋น„ํ•ด ๋„ˆ๋ฌด ํด ๊ฒฝ์šฐ ์ˆ˜์ • ์ž‘์—… ํ•„์š”
    → ๋ง์…ˆ์„ ์ „๋ถ€ ํ•œ ๋‹ค์Œ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๋Œ€์‹  ์ค‘๊ฐ„์ค‘๊ฐ„ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ•ด ๋”ํ•œ๊ฐ’์„ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ

 

์ถฉ๋Œ ์ฒ˜๋ฆฌ

์ถฉ๋Œ(collision) : ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค์— ๋Œ€ํ•ด ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ๊ฐ™์€ ๊ฒƒ (ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท์— 2๊ฐœ์˜ ๊ฐ’์„ ๋„ฃdj ์ถฉ๋Œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”)

 

1) ์ฒด์ด๋‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ

์ฒด์ด๋‹ : ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ๋ฒ„ํ‚ท์— ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ

  • ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ณต๊ฐ„ ํ™œ์šฉ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. (์ถฉ๋Œ์ด ๋งŽ์•„์ง€๋ฉด ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ ธ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ณต๊ฐ„ ์‚ฌ์šฉ๋„↓)
  • ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค. (์ถฉ๋Œ์ด ๋งŽ์œผ๋ฉด ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ ์ž์ฒด์˜ ํ•œ๊ณ„๋กœ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ์ €ํ•˜)

2) ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•(open addressing) : ๋นˆ ๋ฒ„ํ‚ท์„ ์ฐพ์•„ ์ถฉ๋Œ๊ฐ’์„ ์‚ฝ์ž… → ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ฏ€๋กœ ํšจ์œจ์  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ

  • ์„ ํ˜• ํƒ์‚ฌ ๋ฐฉ์‹ (linear probing) 
    • ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ ๋นˆ ๋ฒ„ํ‚ท์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ด๋™
    • ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฐ’๋ผ๋ฆฌ ๋ชจ์ด๋Š” ์˜์—ญ์ด ์ƒ๊ฒจ ํด๋Ÿฌ์Šคํ„ฐ ํ˜•์„ฑ (์ด๋Ÿฌํ•œ ๊ตฐ์ง‘์ด ์ƒ๊ธฐ๋ฉด ํ•ด์‹œ๊ฐ’์ด ๊ฒน์น  ํ™•๋ฅ  ์ฆ๊ฐ€)
  • ์ด์ค‘ ํ•ด์‹ฑ ๋ฐฉ์‹
    • ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ 2๊ฐœ ์‚ฌ์šฉ
    • ๋‘ ๋ฒˆ์งธ ํ•ด์‹œํ•จ์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ ํ•ด์‹œํ•จ์ˆ˜๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์œ„์น˜ ๊ธฐ์ค€ ์–ด๋–ป๊ฒŒ ์œ„์น˜๋ฅผ ์ •ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• 
    • ์„ ํ˜• ํƒ์‚ฌ์™€ ๋น„์Šทํ•˜๊ฒŒ ๋”ํ•˜๋Š” ๋ฐฉ์‹์ด์ง€๋งŒ ์ฃผ์–ด์ง€๋Š” ํ‚ค๋งˆ๋‹ค ์ ํ”„ํ•˜๋Š” ์œ„์น˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„œ ํด๋Ÿฌ์Šคํ„ฐ ํ˜•์„ฑ ๊ฐ์†Œ

 

ํ•ด์‹œ ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ํ‚ค์™€ ๊ฐ’์„ ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ • !!


โ€ป ์ฐธ๊ณ  ์ž๋ฃŒ โ€ป

https://wikidocs.net/221191

ํ(Queue)๋ž€?

๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • FIFO(First In First Out) : ์„ ์ž…์„ ์ถœ
  • push : ํ์— ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ / pop : ํ์—์„œ ๊บผ๋‚ด๋Š” ์—ฐ์‚ฐ

 

ํ์˜ ๋™์ž‘์›๋ฆฌ

์ดˆ๊ธฐ ๋น„์–ด์žˆ๋Š” ํ

 

๋น„์–ด์žˆ๋Š” ํ์— '2'์™€ '5'๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์‚ฝ์ž…

 

ํŒ์„ ํ•˜๋ฉด ๋จผ์ € ๋“ค์–ด๊ฐ€ ์žˆ๋˜ '2'๊ฐ€ ๋‚˜์˜ค๊ณ  ํ•œ ๋ฒˆ ๋” ์ง„ํ–‰ํ•˜๋ฉด '5'๋ฅผ ์ œ๊ฑฐ

 

ํ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜๋Š” ๋ถ„์•ผ

์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…

  • ์ž‘์—… ๋Œ€๊ธฐ์—ด : ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์‹œ ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„์— ์ž‘์—…์„ ์š”์ฒญํ•˜๋ฉด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—… ์ฒ˜๋ฆฌ
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ : ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ(ํ‚ค๋ณด๋“œ/๋งˆ์šฐ์Šค) ์ฒ˜๋ฆฌ

 

ํ์˜ ADT (Abstract Data Type)

  • ์Šคํƒ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์Šคํƒ์˜ top → ํ์˜ front(์•ž) / rear(๋’ค)
    • ํ๋Š” ์•ž์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๊ณ  ๋’ค์—์„œ ๋„ฃ์œผ๋ฏ€๋กœ ์•ž๋’ค ์ตœ์ข…์œ„์น˜ ์ €์žฅ ํ•„์š”
๊ตฌ๋ถ„ ์ •์˜ ์„ค๋ช…
์—ฐ์‚ฐ boolean isFull() ํ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ maxsize์ธ์ง€ ํ™•์ธํ•ด boolean๊ฐ’ ๋ฐ˜ํ™˜
(๊ฐ€๋“ ์ฐจ ์žˆ๋‹ค๋ฉด True / ์•„๋‹ˆ๋ฉด False)
boolean isEmpty() ํ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š”์ง€ ํ™•์ธํ•ด boolean๊ฐ’ ๋ฐ˜ํ™˜
(๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด False / ์•„๋‹ˆ๋ฉด True)
void push(Item Tyoe item) ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ํ‘ธ์‹œ
ItemType pop() ํ์—์„œ ์ฒ˜์Œ ํ‘ธ์‹œํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒํ•˜๊ณ  ๊ทธ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
์ƒํƒœ Int front ํ์—์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํŒํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ก
Int rear ํ์—์„œ ์ตœ๊ทผ์— ํ‘ธ์‹œํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ก
ItemType data[maxsize] ํ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฐ์—ด (์ตœ๋Œ€ maxsize๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ)

 

ํ์˜ ์„ธ๋ถ€๋™์ž‘

ํ์˜ ๊ธฐ๋ณธ๊ตฌ์กฐ
ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ (push)

 

ํ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒฝ์šฐ (pop)

 

๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ (push)

 

ํ ๊ตฌํ˜„ํ•˜๊ธฐ

1) ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹

  • push : append( )
  • pop : pop( )
    •  ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ pop(0) ์‚ฌ์šฉ
queue = []

# ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.append(1)
queue.append(2)
queue.append(3)

# ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
first_item = queue.pop(0)
print(first_item)

# ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.append(4)
queue.append(5)

# ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
first_item = queue.pop(0)
print(first_item)

 

2) ๋ฑ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹

  • DEQ(Double Ended Queue)
  • ์–‘ ๋์—์„œ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ํ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ
from collections import deque

queue = deque()

# ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.append(1)
queue.append(2)
queue.append(3)

# ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
first_item = queue.popleft()
print(first_item)

# ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.append(4)
queue.append(5)

# ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
first_item = queue.popleft()
print(first_item)

โ€ป ์ฐธ๊ณ  ์ž๋ฃŒ โ€ป

https://wikidocs.net/221191

์Šคํƒ(Stack)์ด๋ž€?

๋จผ์ € ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์ผ ๋‚˜์ค‘์— ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • FILO(First In Last Out) : ๋จผ์ € ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด ๋งˆ์ง€๋ง‰์— ๋‚˜์˜ค๋Š” ๊ทœ์น™
  • push : ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ / pop : ์Šคํƒ์—์„œ ๊บผ๋‚ด๋Š” ์—ฐ์‚ฐ

 

์Šคํƒ์˜ ๋™์ž‘์›๋ฆฌ

์ดˆ๊ธฐ ๋นˆ ์Šคํƒ์— ๋ฐ์ดํ„ฐ'1'๊ณผ ๋ฐ์ดํ„ฐ'2' push
popํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ'2' ์ œ๊ฑฐ
๋ฐ์ดํ„ฐ'3'์„ pushํ•˜๋ฉด ๋ฐ์ดํ„ฐ'1' ์œ„์— ์œ„์น˜
2๋ฒˆ ์—ฐ์†์œผ๋กœ pop์„ ํ•˜๋ฉด '3' → '1' ์ˆœ์„œ๋กœ ์ œ๊ฑฐ

 

์Šคํƒ์˜ ADT (Abstract Data Type)

์ถ”์ƒ ์ž๋ฃŒํ˜•์ด๋ผ๋Š” ๋œป์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์žˆ๊ณ  ์‹ค์ œ๋กœ ๊ตฌํ˜„์€ ๋˜์ง€์•Š์€ ์ž๋ฃŒํ˜•

๊ตฌ๋ถ„ ์ •์˜ ์„ค๋ช…
์—ฐ์‚ฐ boolean isFull() ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ maxsize์ธ์ง€ ํ™•์ธํ•ด boolean๊ฐ’ ๋ฐ˜ํ™˜
(๊ฐ€๋“ ์ฐจ ์žˆ๋‹ค๋ฉด True / ์•„๋‹ˆ๋ฉด False)
boolean isEmpty() ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š”์ง€ ํ™•์ธํ•ด boolean๊ฐ’ ๋ฐ˜ํ™˜
(๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด False / ์•„๋‹ˆ๋ฉด True)
void push(Item Tyoe item) ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ํ‘ธ์‹œ
ItemType pop() ์Šคํƒ์—์„œ ์ตœ๊ทผ์— ํ‘ธ์‹œํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒํ•˜๊ณ  ๊ทธ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
์ƒํƒœ Int top ์Šคํƒ์—์„œ ์ตœ๊ทผ์— ํ‘ธ์‹œํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ก
ItemType data[maxsize] ์Šคํƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฐ์—ด (์ตœ๋Œ€ maxsize๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ)

 

์Šคํƒ์˜ ์„ธ๋ถ€๋™์ž‘

์Šคํƒ์˜ ๊ธฐ๋ณธ๊ตฌ์กฐ
์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ (push)
์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒฝ์šฐ (pop)

 

 

์Šคํƒ ๊ตฌํ˜„ํ•˜๊ธฐ

stack = []          # ์Šคํƒ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
max_size = 10       # ์Šคํƒ์˜ ์ตœ๋Œ€ํฌ๊ธฐ

# ์Šคํƒ์ด ๊ฐ€๋“์ฐผ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
def isFull(stack):
    return len(stack) == max_size

# ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
def isEmpty(stack):
    return len(stack) == 0

# ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜
def push(stack, item):
    if isFull(stack):
        print("์Šคํƒ์ด ๊ฐ€๋“ ์ฐผ์Šต๋‹ˆ๋‹ค.")
    else:
        stack.append(item)
        print("๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")

# ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ํ•จ์ˆ˜
def pop(stack):
    if isEmpty(stack):
        print("์Šคํƒ์ด ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค.")
        return None
    else:
        return stack.pop()

 

  • ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ๋Š” ํฌ๊ธฐ๋ฅผ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์‹ค์ œ ์ฝ”๋“œ์—์„œ max_size, isFull(), isEmpty() ํ•จ์ˆ˜ ๊ตฌํ˜„ X
  • push(), pop() ํ•จ์ˆ˜๊ฐ€ ํ•˜๋Š” ์ผ์€ ๋ฆฌ์ŠคํŠธ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ ๋ฟ์ด๋ฏ€๋กœ ๊ตณ์ด ๊ตฌํ˜„ X
  • ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜ ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ์–ด์„œ ์‚ฌ์šฉ
stack = []

# ์Šคํƒ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
stack.append(1)
stack.append(2)
stack.append(3)

# ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ
top_element = stack.pop()	# top_element = 3
next_element = stack.pop()	# next_element = 2

# ์Šคํƒ์˜ ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ
stack_size = len(stack)

 

→ ์Šคํƒ์˜ ๊ฐœ๋… ์ž์ฒด๋Š” ์–ด๋ ต์ง€ ์•Š์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์Šคํƒ์„ ๋– ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ์—ฐ์Šต์ด ํ•„์š” !!


โ€ป ์ฐธ๊ณ  ์ž๋ฃŒ โ€ป

https://wikidocs.net/221191

๋ฐฐ์—ด

์ธ๋ฑ์Šค์™€ ๊ฐ’์„ ์ผ๋Œ€์ผ ๋Œ€์‘ํ•ด ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ณต๊ฐ„์€ ์ธ๋ฑ์Šค์™€ ์ผ๋Œ€์ผ ๋Œ€์‘
  • ์–ด๋–ค ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“  ํ•œ ๋ฒˆ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ → ์ž„์˜ ์ ‘๊ทผ (random access)

 

๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•

# 1. ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•
arr = [0,0,0,0,0,0]
arr = [0] * 6

# 2. ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
arr = list(range(6))			# [0,1,2,3,4,5]

# 3. ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
arr = [0 for _ in range(6)]		# [0,0,0,0,0,0]

 

โ€ป ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด ๋Œ€์‹  ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉ โ€ป

๋ฐฐ์—ด์ด ์ปดํ“จํ„ฐ์— ์ €์žฅ๋œ ๋ชจ์Šต

 

๋ฐฐ์—ด๊ณผ ์ฐจ์›

  • ๋ฐฐ์—ด์€ 2์ฐจ์›, 3์ฐจ์›๊ณผ ๊ฐ™์ด ๋‹ค์ฐจ์› ๋ฐฐ์—ด๋กœ๋„ ์‚ฌ์šฉ
  • ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋Š” 1์ฐจ์›์ด๋ฏ€๋กœ ๋‹ค์ฐจ์› ๋ฐฐ์—ด๋„ 1์ฐจ์› ๊ณต๊ฐ„์— ์ €์žฅ
  • ๋ฐฐ์—ด์€ ์ฐจ์›๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์† ํ• ๋‹น

 

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

  • ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฐ์—ด ํ˜•ํƒœ
  • ๋ฐฐ์—ด์˜ ๋ชจ์Šต = ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ์‹ค์ œ ๋ฐฐ์—ด์˜ ๋ชจ์Šต

(์™ผ์ชฝ) ๋ฐฐ์—ด์˜ ๋ชจ์Šต (์˜ค๋ฅธ์ชฝ) ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ์‹ค์ œ ๋ฐฐ์—ด์˜ ๋ชจ์Šต

 

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

  • 1์ฐจ์› ๋ฐฐ์—ด์„ ํ™•์žฅํ•œ ๊ฒƒ
# 2์ฐจ์› ๋ฐฐ์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„
arr = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]

# ์ €์žฅ๋œ ๊ฐ’ ์ถœ๋ ฅ
print(arr[2][3])

# ์ €์žฅ๋œ ๊ฐ’์„ ๋ณ€๊ฒฝ
arr[2][3] = 15

# ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์„ ํ™œ์šฉ
arr = [[i]*4 for i in range(3)]

(์™ผ์ชฝ) 2์ฐจ์› ๋ฐฐ์—ด์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ‘œํ˜„ (์˜ค๋ฅธ์ชฝ) ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ์‹ค์ œ ๋ฐฐ์—ด์˜ ๋ชจ์Šต

 

๋ฐฐ์—ด ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ๋ฐฐ์—ด์€ ์ž„์˜ ์ ‘๊ทผ์ด๋ผ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“  ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋‹จ ํ•œ ๋ฒˆ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)

 

๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ

(1) ๋งจ ๋’ค์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ

  • ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์œ„์น˜์— ์˜ํ–ฅ X
  • ์‹œ๊ฐ„๋ณต์žก๋„ = O(1)

(2) ๋งจ ์•ž์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ

  • ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋“ค์„ ๋’ค๋กœ ํ•œ ์นธ์”ฉ ๋ฏธ๋Š” ์—ฐ์‚ฐ ํ•„์š”
  • ์‹œ๊ฐ„๋ณต์žก๋„ = O(N)

(3) ์ค‘๊ฐ„์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ

  • ํ˜„์žฌ ์‚ฝ์ž…ํ•œ ๋ฐ์ดํ„ฐ ๋’ค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋งŒํผ ๋ฏธ๋Š” ์—ฐ์‚ฐ ํ•„์š”
  • ์‹œ๊ฐ„๋ณต์žก๋„ = O(N)

 

๋ฐฐ์—ด์„ ์„ ํƒํ•  ๋•Œ ๊ณ ๋ คํ•  ์ 

  • ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ํ™•์ธ
    • ํ‘œํ˜„ํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ๋Ÿฐํƒ€์ž„์—์„œ ๋ฐฐ์—ด ํ• ๋‹น ์‹คํŒจ
    • ๋ณดํ†ต ์ •์ˆ˜ํ˜• 1์ฐจ์› ๋ฐฐ์—ด์€ 1000๋งŒ๊ฐœ, 2์ฐจ์› ๋ฐฐ์—ด์€ 3000*3000 ํฌ๊ธฐ๊ฐ€ ์ตœ๋Œ€
  • ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์ด ๋งŽ์€์ง€ ํ™•์ธ
    • ๋ฐฐ์—ด์€ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฏ€๋กœ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฝ์ž…ํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐœ์ƒ

โ€ป ์ฐธ๊ณ  ์ž๋ฃŒ โ€ป

https://wikidocs.net/221191

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด "๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜" ํ•„์š”

→ ํšจ์œจ์ ์œผ๋กœ ํ‘ธ๋Š” ๊ฒƒ์€ ์ œํ•œ ์‹œ๊ฐ„๊ณผ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ‘ธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

1) ์ ˆ๋Œ€ ์‹œ๊ฐ„ ์ธก์ • : ๋ง ๊ทธ๋Œ€๋กœ ์‹œ๊ฐ„ ์ธก์ •

2) ์‹œ๊ฐ„ ๋ณต์žก๋„ ์ธก์ • : ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ์ž‘ ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๊ฒฐ๊ด๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜ ์ธก์ •

  • ์ž…๋ ฅ ํฌ๊ธฐ : ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ๋‹ค์–‘ํ•˜๋ฉฐ ์ด์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ N์œผ๋กœ ์ผ๋ฐ˜ํ™”
  • ์ธก์ • ๊ฒฐ๊ณผ : ์ตœ์„ (best) / ๋ณดํ†ต(normal) / ์ตœ์•…(worst)
  • ํ‘œํ˜„ ๋ฐฉ์‹ : ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ

 

์‹œ๊ฐ„ ๋ณต์žก๋„ (Time Complexity)

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ๋กœ ์ž…๋ ฅ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ ํšŸ์ˆ˜

 

ex) 1์ฐจ์› ๋ฐฐ์—ด ๊ฒ€์ƒ‰

  • ๊ฐ’์„ ๊ฐ€์žฅ ๋นจ๋ฆฌ ์ฐพ๋Š” ๊ฒฝ์šฐ : ๊ฒ€์ƒ‰ ์‹œ์ž‘ ์œ„์น˜์— ์ฐพ์„ ๊ฐ’์ด ๋ฐ”๋กœ ์œ„์น˜ํ•œ ๊ฒฝ์šฐ
  • ๊ฐ’์„ ๊ฐ€์žฅ ๋Šฆ๊ฒŒ ์ฐพ๋Š” ๊ฒฝ์šฐ : ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์ด ์—†๊ฑฐ๋‚˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ ๊ฒฝ์šฐ

 

์ ๊ทผ์  ํ‘œ๊ธฐ๋ฒ•

์ž…๋ ฅ ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ์—ฐ์‚ฐ ํšŸ์ˆ˜์˜ ์ถ”์ด๋ฅผ ํ™œ์šฉํ•ด ์‹œ๊ฐ„ ๋ณต์žก๋„ ํ‘œํ˜„

  • ๋น…์˜ค(Big-O, O) ํ‘œ๊ธฐ๋ฒ• : ์ตœ์•…์ผ ๋•Œ ์—ฐ์‚ฐํšŸ์ˆ˜ (์ˆ˜ํ–‰์‹œ๊ฐ„์˜ ์ƒํ•œ)   โ˜… ์ฃผ๋กœ ์‚ฌ์šฉ โ˜…
    • ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ํ†ต๊ณผํ•ด์•ผํ•˜๋ฏ€๋กœ ์ฃผ๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ์ธ ๋น…์˜ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ 
  • ๋น…์˜ค๋ฉ”๊ฐ€(Big-Omega, Ω) ํ‘œ๊ธฐ๋ฒ• : ์ตœ์„ ์ผ ๋•Œ ์—ฐ์‚ฐํšŸ์ˆ˜ (์ˆ˜ํ–‰์‹œ๊ฐ„์˜ ํ•˜ํ•œ)
  • ๋น…์„ธํƒ€(Big Theta, Θ) ํ‘œ๊ธฐ๋ฒ• : ๋ณดํ†ต์ผ ๋•Œ ์—ฐ์‚ฐํšŸ์ˆ˜ (์ˆ˜ํ–‰์‹œ๊ฐ„์˜ ์ƒํ•œ๊ณผ ํ•˜ํ•œ)

 

๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜

1. O(1) : ์ƒ์ˆ˜

์ž…๋ ฅ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ์ผ์ •ํ•œ ์‹œ๊ฐ„ ์†Œ์š”

ex) ์Šคํƒ์˜ Push / Pop

 

2. O(log N) : ๋กœ๊ทธ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๊ฐ์†Œ

ex) ์ด์ง„ํŠธ๋ฆฌ / ์ˆœ๊ธฐ๋Šฅ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ์žฌ๊ท€

 

3. O(N) : ์„ ํ˜•

์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์— ๋น„๋ก€ํ•ด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ์ฆ๊ฐ€ (Nํฌ๊ธฐ๋งŒํผ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ์ฆ๊ฐ€)

ex) for๋ฌธ

 

4. O(N log N) : ์„ ํ˜• ๋กœ๊ทธ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋กœ๊ทธ์˜ ๋ฐฐ๋งŒํผ ์ฆ๊ฐ€

ex) ํ€ต ์ •๋ ฌ(Quick Sort) / ํ•ฉ๋ณ‘ ์ •๋ ฌ(Merge Sort) / ํž™ ์ •๋ ฌ(Heap Sort)

 

5. O( N² ) : ๋‹คํ•ญ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ N๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ณ  ๊ทธ ์•ˆ์—์„œ๋„ N๋งŒํผ ๋ฐ˜๋ณตํ•˜์—ฌ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€

ex) ์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort) / ๋ฒ„๋ธ” ์ •๋ ฌ(Bubble Sort) / ์„ ํƒ ์ •๋ ฌ(Selection Sort) / ์ด์ค‘ for๋ฌธ

 

6. O( 2โฟ ) : ์ง€์ˆ˜

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€

ex) ํ”ผ๋ณด๋‚˜์น˜(Fibonacci) ์ˆ˜์—ด


โ€ป ์ฐธ๊ณ  ์ž๋ฃŒ โ€ป

https://wikidocs.net/221191

 

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ด€๋ จ ๊ฐ•์˜์™€ ์ฑ…์„ ์ฐพ์•„๋ณด๋ฉด์„œ ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๊ณ  ๊ทธ ์ „์— ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค. ("์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ•ฉ๊ฒฉ์ž๋˜๊ธฐ ํŒŒ์ด์ฌํŽธ" ์ฐธ๊ณ )


์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๊ณต๋ถ€๋ฐฉ๋ฒ•

"์•„๋Š” ๊ฒƒ๊ณผ ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ธฐ"

 

1. ๊ธฐ๋ก

- ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ–ˆ๋Š”์ง€

- ๊ทผ๊ฑฐ๋Š” ๋ฌด์—‡์ธ์ง€

- ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋กœ ๋งŒ๋“œ๋ ค๊ณ  ํ–ˆ๋Š”์ง€

 

2. ์‹œํ—˜ ๋ณด๋“ฏ์ด ๊ณต๋ถ€

- ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ

- ๊ธด์žฅ๊ฐ์„ ์—ฐ์Šต

 

3. ์งง์€ ์‹œ๊ฐ„์œผ๋กœ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ†ต๊ณผ๋Š” ๋ถˆ๊ฐ€๋Šฅ

- ์ตœ์†Œ ํ•œ ๋‹ฌ์—์„œ ๋‘ ๋‹ฌ ์ •๋„ ์ง‘์ค‘ํ•ด์„œ ๊ณต๋ถ€

 

4. ๋‚˜๋งŒ์˜ ์–ธ์–ด๋กœ ์š”์•ฝ

- ์ดํ•ดํ•œ ๋’ค์— ์š”์•ฝ์€ ํ•„์ˆ˜

- ์ œ๋Œ€๋กœ ์ดํ•ดํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •

 

๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฒ•

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ = ๋ฌธ์ œ ํ’€์ด ๋Šฅ๋ ฅ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ

→ ๋ฌธ์ œ ๋ถ„์„์— ์‹œ๊ฐ„ ํˆฌ์ž ํ•„์š” (50%~60% ์ •๋„)

1. ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ์„œ ๋ถ„์„


2. ์ œ์•ฝ ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€
- ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ฏผํ•  ๋•Œ ์œ ์šฉ
- ์ถ”ํ›„ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„์—์„œ ์˜ˆ์™ธ๋ฅผ ๊ฑฐ๋ฅด๊ธฐ ํŽธ๋ฆฌ


3. ์ž…๋ ฅ๊ฐ’์„ ๋ถ„์„
- ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์ž…๋ ฅ๊ฐ’์ด ๊ฒฐ์ •
- ์ž…๋ ฅ๊ฐ’์˜ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ œํ•œ์‹œ๊ฐ„ ๋‚ด์— ํ’€ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ


4. ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ ํŒŒ์•…


5. ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด๋‚˜ ๊ตฌ์„ฑ ํŒŒ์•…

 

์˜์‚ฌ์ฝ”๋“œ๋กœ ์„ค๊ณ„ํ•˜๋Š” ์—ฐ์Šต

์˜์‚ฌ์ฝ”๋“œ๋ž€?

ํ”„๋กœ๊ทธ๋žจ์˜ ๋…ผ๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ ์ผ์ข…์˜ ์ง€์นจ

์˜์‚ฌ์ฝ”๋“œ์˜ ์›์น™
1. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
2. ์ผ๋ฐ˜์ธ๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž์—ฐ์–ด๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
3. ์ผ์ •ํ•œ ํ˜•์‹์ด ์—†๋‹ค. (์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑ)

์˜์‚ฌ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
1. ์„ธ๋ถ€ ๊ตฌํ˜„์ด ์•„๋‹Œ ๋™์ž‘ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์„ฑ
2. ๋ฌธ์ œ ํ•ด๊ฒฐ ์ˆœ์„œ๋กœ ์ž‘์„ฑ
3. ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธ


โ€ป ์ฐธ๊ณ  ์ž๋ฃŒ โ€ป

https://wikidocs.net/221191

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.2๋ฅผ ํ’€๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๋‚œ์ด๋„๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์›Œ์ ธ ๋‹นํ™ฉ์Šค๋Ÿฌ์› ๋‹ค. ์นœ๊ตฌ๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ถ€ํ„ฐ ํ•ด์•ผํ•œ๋‹ค๋ฉด์„œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณต๋ถ€๋ฒ• ๊ด€๋ จ ์ž๋ฃŒ๋ฅผ ๋ณด๋‚ด์ค˜์„œ ๋‚˜๋ฆ„๋Œ€๋กœ ์ •๋ฆฌํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ํ•ด์•ผํ•  ๊ฒƒ์ด ๋„ˆ๋ฌด ๋งŽ์€๋ฐ ์•„๋ฌด๊ฒƒ๋„ ์•ˆํ•˜๊ณ  ์žˆ๋Š” ๋‚˜...๋„ˆ๋ฌด ๋Œ€๋‹จํ•˜๋‹ค...!!


1๋‹จ๊ณ„. ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ๋ฐ ์ž๋ฃŒ๊ตฌ์กฐ

์–ด๋–ค ์–ธ์–ด๋กœ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ•๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ ๊ณต๋ถ€

 

1) ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์„ ํƒ

ํŽธํ•˜๊ณ  ์ต์ˆ™ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์„ ํƒํ•˜๊ณ  ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ• ๊ณต๋ถ€

 

2) ์ž๋ฃŒ๊ตฌ์กฐ ๊ณต๋ถ€

  • ๊ณต๋ถ€ ์ˆœ์„œ
    • ๋ฐฐ์—ด (Array)
    • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Linked List)
    • ์Šคํƒ (Stack)
    • ํ (Queue)
    • ํ•ด์‹œ ํ…Œ์ด๋ธ” (Hash Table)
    • ํŠธ๋ฆฌ (Tree)
    • ํž™ (Heap)
    • ๊ทธ๋ž˜ํ”„ (Graph)
  • ๊ณต๋ถ€ ๋ฐฉ๋ฒ•
    • ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ชฉ์ ๊ณผ ์ด๋ก  ์ดํ•ด (์ฑ…์ด๋‚˜ ๊ฐ•์˜ ํ™œ์šฉ)
    • ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ตฌํ˜„ ๋กœ์ง ๋”ฐ๋ผํ•˜๋ฉฐ ๋‚ด๋ถ€ ์ž‘๋™์›๋ฆฌ ํŒŒ์•… (๊ตฌ๊ธ€ ๊ฒ€์ƒ‰)
    • ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ฌธ์ œ ํ•ด๊ฒฐ (์ฝ”๋”ฉ ์—ฐ์Šต ์‚ฌ์ดํŠธ ์ด์šฉ)

 

2๋‹จ๊ณ„. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก 

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€

 

1) ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋… ๊ณต๋ถ€

  • ์ด์ง„ ํƒ์ƒ‰ (Binary Search)
  • ์ •๋ ฌ (Sorting)
  • ์™„์ „ ํƒ์ƒ‰ (Exhaustive Search)
  • ์žฌ๊ท€ (Recursion)
  • ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ (DFS)
  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ (BFS)
  • ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP, Dynamic Programming)
  • ๋ฐฑ ํŠธ๋ž˜ํ‚น (Backtracking)

2) ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ• (big-O notation) ๋งˆ์Šคํ„ฐ

  • ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์˜ ํšจ์œจ์„ฑ์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•œ ์ฒ™๋„
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ

 

3๋‹จ๊ณ„. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด

๊ธฐ๋ณธ์ ์ธ ์ด๋ก ์„ ๊ณต๋ถ€ํ•˜๊ณ  ๋ฌธ์ œ ํ’€์ด

 

1) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ์ถœ๋ฌธ์ œ ํ”Œ๋žซํผ

2) ๋ฌธ์ œํ’€์ด ํŒ

  • ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋ถ€ํ„ฐ ์‹œ์ž‘
  • ์‹œ๊ฐ„์„ ์ •ํ•ด๋†“๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ชปํ’€์—ˆ์„ ๊ฒฝ์šฐ ์ •๋‹ต ํ™•์ธ
  • ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์‹œ๊ฐ„ ๋ฐ ๊ณต๊ฐ„๋ณต์žก๋„ ๋ถ„์„
  • ํ’€๊ณ  ๋‚œ ํ›„์—๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด ์ฐธ๊ณ 

โ€ป Reference โ€ป

์ฝ”๋”ฉํ…Œ์ŠคํŠธ 4๋‹จ๊ณ„ ๊ณต๋ถ€๋ฒ• ๐ŸŒŸ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„(์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€) ์ปค๋ฆฌํ˜๋Ÿผ ๐ŸŒŸ

→ ๊ธฐ๋ณธ์ ์ธ ๋‹จ๊ณ„ ์„ค์ •์— ๋„์›€์ด ๋งŽ์ด ๋œ ๋ธ”๋กœ๊ทธ

 

์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•œ 5๊ฐ€์ง€ ๋‹จ๊ณ„

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„๋ฅผ ์œ„ํ•œ ๋ฐฑ์ค€ ๋ฌธ์ œ ์ถ”์ฒœ

 

 

+ Recent posts