Skip to content

Latest commit

ย 

History

History
426 lines (272 loc) ยท 15.3 KB

File metadata and controls

426 lines (272 loc) ยท 15.3 KB
cover coverY layout
0
cover title description tableOfContents outline pagination
visible size
true
hero
visible
true
visible
true
visible
true
visible
true
visible
true

Big O

1. ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•œ ์ด์œ 

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

์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์–ด๋– ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์“ฐ์—ฌ์ง€๋Š” ์–ธ์–ด

์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ณด๋‹ค ์‰ฝ๊ณ  ํšจ์šธ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ

ํ˜„์—…์˜ ๊ฒฝ์šฐ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜์ง€ ์•Š์Œ ๋Œ€๋ถ€๋ถ„์€ ์–ธ์–ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ด๋ฏธ ์ž˜ ๋งŒ๋“ค์–ด์ง„ ์•„์ด๋“ค์„ ๊ฐ€์ ธ์™€์„œ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉ

2) ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ๊นŒ?

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž‘์„ฑ ํ›„ ์งˆ์˜/์‘๋‹ต์„ ํ†ตํ•ด ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์–ผ๋งˆ๋‚˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๊ณ  ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„ ๋ณต์žก๋„์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ธฐ ์œ„ํ•จ

EX.

  • ํ•˜ํ•„ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•œ ์ด์œ ๋Š”?
  • ์ด๊ฒƒ์ด ์ €๊ฒƒ๋“ค์˜ ๋น„ํ•ด ์žฅ๋‹จ์ ์€?
  • ์ €๊ฒƒ๊ณผ ์ด๊ฒƒ์˜ ์ฐจ์ด๋Š”?

2. ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถ€๋ฐฉ๋ฒ•

์ž๋ฃŒ ๊ตฌ์กฐ๋Š” ์–ด๋Š ์ƒํ™ฉ์— ์“ฐ์ด๋Š” ๊ฒƒ์ด ์ข‹๊ณ  ๋˜ ์–ด๋–ค ์‹์˜ API๋“ค์ด ์žˆ๋Š”์ง€ ์ด๋Ÿฐ ๊ฒƒ๋“ค ์กฐ๊ธˆ ํฐ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด์„œ ๊ณต๋ถ€

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

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

๐Ÿ’ก ์ž๋ฃŒ ๊ตฌ์กฐ ๊ณต๋ถ€์‹œ Point

  1. Order : ์ž๋ฃŒ ๊ตฌ์กฐ ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ?
  2. Unique : ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  3. Search : ๊ฒ€์ƒ‰์— ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ธ๊ฐ€?
  4. Modification : ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ์„œ ์ˆ˜์ •์‹œ ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ธ์ง€?

3. BigO

์ถœ์ฒ˜ : ๋‹ˆ๊ผด๋ผ์Šค https://www.youtube.com/watch?v=BEVnxbxBqi8

1) ๊ฐœ์š”

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์Šคํ”ผ๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•˜๋Š”์ง€ ์•Œ์•„๋ด„
  • ๋น ๋ฅด๋‹ค, ๋Š๋ฆฌ๋‹ค์˜ ๋ง์ด ์•„๋‹Œ CS์ง€์‹

2) ์•Œ๊ณ ๋ฆฌ์ฆ˜


์ œํ•œ๋œ ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„ ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ •ํ•ด๋†“์€ ๋กœ์ง

์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ •๋ ฌ ๋˜๋Š” ์ด์ ์„ ๊ตฌํ•˜๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๊ณ„์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•จ

์ฆ‰, ์ฃผ์–ด์ง„ input์œผ๋กœ ์ •์˜๋œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ output ๊ฒฐ๊ณผ๊ฐ’์„ ๋‚ด๋Š” ๊ฒƒ

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


๐Ÿ’ซ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ์ž…๋ ฅ์˜ ํ•จ์ˆ˜ ๊ด€๊ณ„

  1. โ€œ๋น ๋ฅด๋‹คโ€, โ€œ๋Š๋ฆฌ๋‹คโ€๋Š” ์‹œ๊ฐ„์œผ๋กœ ํ‘œํ˜„ํ•˜์ง€ ์•Š์Œ(์‹œ๊ฐ„ ๋ณต์žก๋„)

    • ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๋„ ๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ์นœ๊ตฌ์˜ ์ปดํ“จํ„ฐ๋ณด๋‹ค ๋น ๋ฅผ ์ˆ˜ ์žˆ์Œ
    • ์ปดํ“จํ„ฐ๋ผ๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ
    • โ€œ์™„๋ฃŒ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์ ˆ์ฐจ์˜ ์ˆ˜โ€STEPS
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜
    • ํŠน์ • ํฌ๊ธฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”์ง€\
  2. ์„ ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ ์‚ฌ์ด์ฆˆ๊ฐ€ N๊ฐœ์ด๋ฉด, N์Šคํ…์ด ํ•„์š”ํ•จ

4) ๊ณต๊ฐ„๋ณต์žก๋„


  • ๊ณต๊ฐ„๋ณต์žก๋„ : ํŠน์ •ํ•œ ํฌ๊ธฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๋Š”์ง€
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘
  • ์˜ˆ๋ฅผ ๋“ค์–ด int a[1004];๋ผ๋Š” ๋ฐฐ์—ด์ด๋ฉด a ๋ฐฐ์—ด์€ 1004X4๋ฐ”์ดํŠธ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋จ

5) Big O


๐Ÿ’ซ ์‚ฌ์ด์ฆˆ๊ฐ€ N๊ฐœ๋ฉด, N์Šคํ…์ด ํ•„์š”ํ•ด์š”!!! ๋ณด๋‹ค๋Š” ์„ ํ˜•๊ฒ€์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ = O(N) ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ์ปจ์…‰์„ Big O

  1. Big O๋ž€ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํ‘œ๊ธฐ๋ฒ•
  2. ์–ธ์ œ ๋ฌด์—‡์„ ์“ธ์ง€ ๋น ๋ฅด๊ฒŒ ํŒŒ์•… ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ ๊ฐ€๋Šฅ
    • ์™œ..? ๋ฏธ๋ž˜์— ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์œผ๋‹ˆ
    • Big O๋ฅผ ์ดํ•ด์‹œ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋น ๋ฅด๊ฒŒ ๋ถ„์„ ๊ฐ€๋Šฅ, ์–ธ์ œ ๋ฌด์—‡์„ ์“ธ์ง€ ํŒŒ์•… ๊ฐ€๋Šฅ
  3. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํผํฌ๋จผ์Šค๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์„ ํ˜•๊ฒ€์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ = O(N)
  • but, ํ•ญ์ƒ Big O๊ฐ€ ๋ชจ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์™„๋ฒฝํžˆ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜
  1. ๋ฐฐ์—ด์„ ์ธํ’‹์œผ๋กœ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜, ์ธํ’‹์˜ ํฌ๊ธฐ ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ์ˆ˜์˜ ์Šคํ…์ด ํ•„์š”
    • ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” print_first๋ผ๋Š” ํŒŒ์ด์ฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ๋งค๊ฐœ๋ณ€์ˆ˜ arr์—๊ฒŒ ๋ฐ›์œผ๋ฉฐ, arr์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ์ถœ๋ ฅํ•ด๋ƒ„
    • ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์ฐพ์œผ๋‹ˆ๊นŒ
    • ์ด ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” constant time(์ƒ์ˆ˜ ์‹œ๊ฐ„) : N์˜ ํฌ๊ธฐ ์ƒ๊ด€์—†์ด ๋๋‚ด๋Š”๋ฐ ๋™์ผํ•œ ์ˆซ์ž์˜ ์Šคํ…์ด ํ•„์š”
def print_first(arr):
		print(arr[0])

  1. ์ด ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ 2๋ฒˆ์˜ print๊ฐ€ ์žˆ๋Š”๋ฐ 2๊ฐœ์˜ ์Šคํ…์ด ํ•„์š”ํ•œ ๊ฒƒ
def print_first(arr):
		print(arr[0])
		print(arr[0])

๐Ÿ’ซ ์ด๋ ‡๋‹ค๋ฉด O[2] ์ผ๊นŒ? NO! ์—ฌ์ „ํžˆ O[1]

  • Big O๋Š” ํ•จ์ˆ˜์˜ ๋””ํ…Œ์ผ์— ๊ด€์‹ฌ์ด ์—†๊ณ , ๋Ÿฌํ”„ํ•˜๊ฒŒ ์–ด๋–ป๊ฒŒ ์ด ํ•จ์ˆ˜๊ฐ€ ์ธํ’‹์˜ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€๊ฐ€ ์ค‘์š”
  • ํ•จ์ˆ˜๋Š” ์ธํ’‹ ์‚ฌ์ด์ฆˆ๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ์ปค์ ธ๋„ ์ƒ๊ด€์—†์ด ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ์ˆซ์ž์— ๋”ฐ๋ผ ์ž‘๋™
  1. ์ฆ‰, Big O๋Š” ํฐ ์›๋ฆฌ์—๋งŒ ๊ด€์‹ฌ์„ ๊ฐ€์ง
  2. ๊ผญ ๊ธฐ์–ตํ•ด ๋‘ฌ์•ผ ํ•  ๊ฒƒ์€ ๋น…์˜ค๋Š” ์ƒ์ˆ˜๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Œ

6) Constant Time Algorithm(์ƒ์ˆ˜ ์‹œ๊ฐ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜)


  • constant time (์ผ์ •ํ•œ ์‹œ๊ฐ„/์ƒ์ˆ˜)
  • ์ธํ’‹์‚ฌ์ด์ฆˆ์™€ ๊ด€๊ณ„์—†์ด ์Šคํ…์ด ์ •ํ•ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค
  • ํ•ญ์ƒ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ โ‡’ ์ธํ’‹์ด ๋Š˜์–ด๋‚˜๋„ ๋ณ€ํ•˜์ง€ ์•Š์Œ
  • ํ˜„์‹ค์ ์œผ๋กœ ํ•ญ์ƒ ๋งŒ๋“ค๊ธฐ ํž˜๋“ค๋‹ค

O(n) ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด

// ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n)์ด ๊ณ„์‚ฐ๋œ๋‹ค. O(1)
public class OneToSum {

    public int sum(int n){
        int sum = 0;

        return n * (n + 1) / 2;
    }


    public static void main(String[] args) {
       int n = 5;
       // static์œผ๋กœ ์ฃผ์ง€ ์•Š์„ ๋•Œ
       OneToSum object = new OneToSum();
       System.out.println(object.sum(10));
    }
}

7) ์‹œ๊ฐ„๋ณต์žก๋„ 1: Big O์˜ ์‹œ๊ฐ„๋ณต์žก๋„, ์„ ํ˜• ์‹œ๊ฐ„ ๋ณต์žก๋„


๋ฐฐ์—ด์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 10์ด๋ผ๋ฉด, 10๋ฒˆ ํ”„๋ฆฐํŠธ ํ•˜๋Š” ํ•จ์ˆ˜ : O(N)

def print_all(arr):
	for n in arr:
		print(n)

Q: ๋งŒ์•ฝ ๋ฐ˜๋ณต๋ฌธ์„ ๋‘๋ฒˆ์ด๋ผ๋ฉด O(2N)์ผ๊นŒ? ****

def print_all(arr):
	for n in arr:
		print(n)
	for n in arr:
		print(n)

A: 2๋Š” ์ƒ์ˆ˜์ด๊ธฐ์— ๋ฒ„๋ ค๋‘๊ณ , ์—ฌ์ „ํžˆ O(N)์œผ๋กœ ํ‘œํ˜„, ํ•ต์‹ฌ์€ ๋ณ€ํ•˜์ง€ ์•Š์•˜์ง€ ๋•Œ๋ฌธ

๋ฉ”์„ธ์ง€๊ฐ€ ๊ฐ™๋‹ค โ‡’ ์ธํ’‹์ด ์ฆ๊ฐ€ํ•˜๋ฉด ์Šคํ…๋„ ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€

O(N)์ด๋‚˜ ์„ ํ˜• ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ทธ๋ž˜ํ”„

8) ์‹œ๊ฐ„๋ณต์žก๋„ 2 : Quadratic Time(2์ฐจ ์‹œ๊ฐ„)


  • Nested Loops(์ค‘์ฒฉ ๋ฐ˜๋ณต)์ด ์žˆ์„ ๋•Œ, ๋ฐœ์ƒ
  • ์•„๋ž˜์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ๊ฐ ์•„์ดํ…œ์— ๋Œ€ํ•ด ๋ฃจํ”„๋ฅผ ๋ฐ˜๋ณต, ์‹คํ–‰
def print_twice(arr)
	for n in arr:
		for x in arr:
			print(x, n)
  • ์‹œ๊ฐ„๋ณต์žก๋„ : ์ธํ’‹ $n^2$

    EX. ์ธํ’‹์ด 10๊ฐœ์‹œ 100๋ฒˆ์˜ ์Šคํ… : ๋ฃจํ”„ ์•ˆ์˜ ๋ฃจํ”„์—์„œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ

2์ฐจ ์‹œ๊ฐ„๋ณต์žก๋„ ๊ทธ๋ž˜ํ”„๋ฅผ ์„ ํ˜• ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๋น„๊ต ๊ทธ๋ž˜ํ”„

์„ ํ˜• ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ 2์ฐจ ์‹œ๊ฐ„๋ณต์žก๋„๋ณด๋‹ค ๋” ํšจ์œจ์ 

9) ์‹œ๊ฐ„๋ณต์žก๋„ 3 : ๋กœ๊ทธ ์‹œ๊ฐ„(Logarithmic Time)


  1. ์ด์ง„๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…์‹œ ์‚ฌ์šฉ โ‡’ ์–ผ๋งˆ๋‚˜ ๋น ๋ฅธ์ง€ ์„ค๋ช… ๊ฐ€๋Šฅ
    1. ์ด์ง„ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ธํ’‹ ์‚ฌ์ด์ฆˆ๊ฐ€ 2๋ฐฐ๊ฐ€ ๋˜์–ด๋„ ํ•„์š”ํ•œ step์˜ ์ˆ˜๋Š” 1๊ฐœ๋ฐ–์— ์•ˆ๋“ค์–ด๋‚จ
    2. ์™œ๋ƒ? ์ด์ง„๊ฒ€์ƒ‰์€ ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์Šคํ…์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ ์„œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด
  2. ํ‘œํ˜„๋ฒ• : O(log N)
  3. ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  4. exponent(์ง€์ˆ˜) โ†” logarithm(๋กœ๊ทธ)
  • n = $log_232$ n์€ 32๋ฅผ 2๋กœ ๋ช‡๋ฒˆ์„ ๋‚˜๋ˆ ์•ผ 1์ด ๋‚˜์˜ฌ๊นŒ?

๐Ÿ’ซ 32 / 2 = 16 โ† 1 16 / 2 = 8 โ† 2 8 / 2 = 4 โ† 3 4 / 2 = 2 โ† 4 2 / 2 = 1 โ† 5 times

  • n์€ 5

    โ‡’ ์ด์ง„ ๊ฒ€์ƒ‰๊ณผ ๊ฐ™์Œ ์ธํ’‹์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ

    โ‡’ Big O์˜ ํŠน์„ฑ์ƒ n = $log32$ ์•„๋ž˜์˜ 2๊ฐ€ ์‚ฌ๋ผ์ง

    โ‡’ So, log N์ด ๋˜๋Š” ๊ฒƒ

  • ๋กœ๊ทธ ์‹œ๊ฐ„๋ณต์žก๋„์˜ ๊ทธ๋ž˜ํ”„

์„ ํ˜•์‹œ๊ฐ„๋ณด๋‹ค๋Š” ๋น ๋ฅด๊ณ , ์ƒ์ˆ˜ ์‹œ๊ฐ„๋ณด๋‹ค๋Š” ๋Š๋ฆผ

10) O(1) & O(N) & O(logN) ๊ทธ๋ž˜ํ”„


O(1) > O(logN) > O(N) ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋‹ค.

O(logN)์€ ์•„์ฃผ ์กฐ๊ธˆ์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๊ณก์„ ์„ ๊ทธ๋ฆฌ๊ณ  ์žˆ๋Š”๋ฐ O(1)๋ณด๋‹ค๋Š” ๋œ ํšจ์œจ์ ์ด์ง€๋งŒ O(N)๋ณด๋‹ค๋Š” ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

์‚ฌ์ง„ ์ถœ์ฒ˜ : https://velog.io/@welloff\_jj/Complexity-and-Big-O-notation

11) ๊ทธ๋ ‡๋‹ค๋ฉด ์—ฐ์Šต๋ฌธ์ œ


์ถœ์ฒ˜ : https://velog.io/@on-n-on-turtle/๋ˆ„๊ตฌ๋‚˜-์ž๋ฃŒ๊ตฌ์กฐ์™€-์•Œ๊ณ ๋ฆฌ์ฆ˜-๋น…์˜คํ‘œ๊ธฐ๋ฒ•

๐Ÿ“– ๋ฆฌ์ŠคํŠธ ๋‚ด ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์ถœ๋ ฅํ•จ

public static void printThings() {
    String[] things = {"apples", "chairs", "files", "notes"};

    for (String thing : things)
        System.out.printf("Here's a thing : %s \n", thing);
}

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ for๋ฃจํ”„์—์„œ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ 4๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— 4๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.

๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ 10๊ฐœ์ด๋ฉด 10๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค.

for๋ฃจํ”„์— ๋Œ€์ž…๋˜๋Š” ๋ฐฐ์—ด์˜ ์›์†Œ ๊ฐฏ์ˆ˜๋งŒํผ ๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์€ O(N)์ด๋‹ค.

๐Ÿ“– ์ฃผ์–ด์ง„ ํ•ด๊ฐ€ ์œค๋…„์ธ์ง€ ์•Œ์•„๋ด„

public static boolean isLeapYear(int year) {
    return (year % 100 == 0) ? (year % 400 == 0) : (year % 4 == 0);
}

N์€ number์ด๋‹ค.

ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ์ˆ˜์— ์ƒ๊ด€์—†์ด ๋‹จ๊ณ„ ์ˆ˜๊ฐ€ ์ผ์ •ํ•˜๋ฏ€๋กœ O(1)์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

12) ์Šคํ„ฐ๋””์—์„œ ์–ป์€ ์ž์ฃผ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ ์ •๋ฆฌ

8์›” 23์ผ ๊ตญ๋น„ ๊ฐ•์˜ ๋“ค์œผ๋ฉด์„œ ์ €๋ฒˆ์ฃผ์— ์ง„ํ–‰ํ•œ ์Šคํ„ฐ๋””์—์„œ ๋‹ค๋ฅธ ๋ถ„์ด ์ •๋ฆฌ ํ•œ ์ถ”๊ฐ€ ๋‚ด์šฉ

1๏ธโƒฃ ๋ฐฐ์—ด

  1. ์‚ฝ์ž…/์‚ญ์ œ: O(N)
  2. ํƒ์ƒ‰: O(1)

๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ๋Š” ๋‹จ์ˆœํžˆ List๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ๐Ÿ‘‰ ํƒ์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ์ž๋ฃŒ๊ตฌ์กฐ(์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๋Š” ํ•œ์ž๋ฆฌ์”ฉ ๋’ค๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ํ•˜๋Š” ์‹์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด๋œ๋‹ค.)

2๏ธโƒฃ ๋ฒกํ„ฐ (= ๋™์ ๋ฐฐ์—ด)

์‚ฝ์ž…/์‚ญ์ œ: O(N)

ํƒ์ƒ‰: O(1)

๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ๋Š” ๋‹จ์ˆœํžˆ List๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. C++ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ๋ฒกํ„ฐ๋Š” ๋‹ค๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ List๋กœ ์“ฐ๋ฉด ๋œ๋‹ค. List ์ž์ฒด๊ฐ€ ์ด๋ฏธ ๋™์  ๋ฐฐ์—ด์„ ์ง€์›ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3๏ธโƒฃ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

  1. ์‚ฝ์ž…/์‚ญ์ œ: O(1)
  2. ํƒ์ƒ‰: O(N)

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

๐Ÿ‘‰ ์‹œ๊ฐ„๋ณต์žก๋„ ์ธก๋ฉด์—์„œ ๋ฐฐ์—ด(List)์™€ ๋ฐ˜๋Œ€ ๋œ๋‹ค. (ํƒ์ƒ‰์„ ํ•˜๋ ค๋ฉด ์ˆœ๊ฐ„์ ์œผ๋กœ ํฌ์ธํ„ฐ ๋ถ€๋ถ„์„ ์ฐ๊ณ  ์ฐ๊ณ  ๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰์ด O(N)์ด ๋˜๊ณ , ์—ฐ๊ฒฐ ์ž์ฒด์˜ ์•ž๋’ค๋กœ ์ˆ˜์ •๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์‚ฝ์ž…/์‚ญ์ œ์‹œ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์ด ๋œ๋‹ค.

๐Ÿ‘‰ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฑ์ค€ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ ๋ง‰ ์‚ฌ์šฉํ• ์ผ์ด ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ, ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„์—๋„ ๋งŽ์ด ์“ฐ์ด๋‹ˆ ์ด๋ก ์ƒ ์•Œ์•„๋‘˜ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

(๋ฉด์ ‘์งˆ๋ฌธ์œผ๋กœ๋„ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ฒ ๋‹ค! ex) "์šฐ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์€ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•œ๋ฐ ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์“ธํ…๊ฐ€??")

4๏ธโƒฃ ์Šคํƒ LIFO

  1. ์‚ฝ์ž…/์‚ญ์ œ: O(1)

๐Ÿ‘‰ Last In First Out ๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ ๊ตฌํ˜„์€ List๋กœ ํ•œ๋‹ค.

s = [1,2,3,4,5,6]

while(len(s)>0):
	print(s[-1])
    s.pop(-1)

์œ„์˜ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ๊ตฌํ˜„ ๋˜๋ฉด ๋˜๋Š”๋ฐ, ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ๊ฑฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฑฐ๋‹ค.

5๏ธโƒฃ ํ LILO

  1. ์‚ฝ์ž…/์‚ญ์ œ: O(1)

๐Ÿ‘‰ ์ค„์„œ๊ธฐ Last in Last Out ๐Ÿ‘‰ from collections import deque ๋กœ ์ž„ํฌํŠธํ•˜์—ฌ ๋ฐํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

from collectionsimport deque

q = deque()
q.append(1)
q.append(2)
q.append(3)

while(len(q) >0):
	print(q.popleft())

์œ„ ์ฝ”๋“œ์—์„œ ๋ณด๋ฉด popleft() ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ฒ˜์Œ์— ์žˆ๋Š” ๊ฐ’์„ ๋นผ๋Š”๋ฐ, ๋ฐํ๋Š” popright()๋ผ๋Š” ํ•จ์ˆ˜๋„ ์ง€์›ํ•œ๋‹ค.

๐Ÿ‘‰ ๋˜ํ•œ ํŒŒ์ด์ฌ์—๋Š” Queue๋„ ์žˆ๊ณ  Deque๋„ ์žˆ๋Š”๋ฐ Queue๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ๋„ ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—ฌ์„œ Deque๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ์ž…์žฅ์ด๋ฏ€๋กœ Deque๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

6๏ธโƒฃ ์šฐ์„ ์ˆœ์œ„ํ(๋‚ด๋ถ€๊ฐ€ Heap์œผ๋กœ ๊ตฌ์„ฑ)

  1. ์‚ฝ์ž…/์‚ญ์ œ : O(logN)
import heapq

# ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•œ๋‹ค.
pq = []
heapq.heappush(pq,3)
heapq.heappush(pq,1)
heapq.heappush(pq,2)

while(len(pq) >0):
	print(heapq.heappop(pq))

๐Ÿ‘‰ ํŒŒ์ด์ฌ์€ MinHeap ์ด๋‹ค.(์ด์ง„ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„๋Š” ํ•ญ์ƒ ์ตœ์†Œ๊ฐ’์ธ)

๐Ÿ‘‰ ์šฐ์„  ์ˆœ์œ„ ํ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” , ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์—ฌ๋Ÿฌ ๊ฐ’๋“ค์„ ๋„ฃ๊ณ  ๋บ„๋•Œ๋งˆ๋‹ค ์ ค ์ž‘์€ ๊ฐ’์ด๋‚˜ ์ ค ํฐ ๊ฐ’์„ ์•Œ์•„์•ผ ํ•  ๋•Œ ์จ์•ผ ํ•œ๋‹ค. Sort() ๊ฐ™์€ ๊ฒฝ์šฐ ์ „์ฒด ๋ฆฌ์ŠคํŠธ ์ž์ฒด๋ฅผ ์ •๋ ฌํ•ด์ค€๋‹ค๋Š” ์ ์—์„œ ํฐ ์ฐจ์ด์ ์„ ๊ฐ€์ง„๋‹ค.

7๏ธโƒฃ Map(๋”•์…”๋„ˆ๋ฆฌ)

  1. ์‚ฝ์ž…/์‚ญ์ œ: O(1)

๐Ÿ‘‰ ํŒŒ์ด์ฌ์€ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์ถ”๊ฐ€๋กœ, c++๊ฐ™์€ ๊ฒฝ์šฐ๋Š” O(logN)์ด ๋˜๋Š”๋ฐ ์ด๋Š” c++์˜ ๋งต์€ ์†์„ ๋“ค์—ฌ๋‹ค ๋ณด๋ฉด ์ด์ง„ ๊ทธ๋ž˜ํ”„๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ณ , python์˜ ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฒฝ์šฐ๋Š” ํ•ด์‹œ๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

8๏ธโƒฃ ์ง‘ํ•ฉ(set)

์‚ฝ์ž…/์‚ญ์ œ: O(logN)

๐Ÿ‘‰์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š”๊ฒŒ ํฐ ํŠน์ง•!

13) ๋น…์˜ค์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์งง์€ ๊ฒƒ๋ถ€ํ„ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ๊นŒ์ง€ ๋‚˜์—ด

  1. O(1) - ์ƒ์ˆ˜ ์‹œ๊ฐ„(Constant Time): ์ž…๋ ฅ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ์ผ์ •ํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”
  2. O(log n) - ๋กœ๊ทธ ์‹œ๊ฐ„(Logarithmic Time): ์ž…๋ ฅ์˜ ํฌ๊ธฐ์— ๋Œ€ํ•ด ๋กœ๊ทธ์˜ ํ˜•ํƒœ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์‹œ๊ฐ„์ด ์†Œ์š”
  3. O(n) - ์„ ํ˜• ์‹œ๊ฐ„(Linear Time): ์ž…๋ ฅ ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ ์‹œ๊ฐ„์ด ์„ ํ˜•์œผ๋กœ ์ฆ๊ฐ€
  4. O(n log n) - ์„ ํ˜• ๋กœ๊ทธ ์‹œ๊ฐ„(Linearithmic Time): n๊ณผ log n์˜ ๊ณฑ๋งŒํผ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€
  5. O(n^2) - ์ด์ฐจ ์‹œ๊ฐ„(Quadratic Time): ์ž…๋ ฅ ํฌ๊ธฐ์˜ ์ œ๊ณฑ์— ๋น„๋ก€ํ•˜์—ฌ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€
  6. O(n^k) - ๋‹คํ•ญ ์‹œ๊ฐ„(Polynomial Time): ์ž…๋ ฅ ํฌ๊ธฐ์˜ k ์ œ๊ณฑ์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„์ด ์†Œ์š”(k๋Š” ์ƒ์ˆ˜).
  7. O(2^n) - ์ง€์ˆ˜ ์‹œ๊ฐ„(Exponential Time): ์ž…๋ ฅ ํฌ๊ธฐ์— ๋Œ€ํ•ด ์ง€์ˆ˜์ ์œผ๋กœ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€
  8. O(n!) - ํŒฉํ† ๋ฆฌ์–ผ ์‹œ๊ฐ„(Factorial Time): ์ž…๋ ฅ ํฌ๊ธฐ์˜ ํŒฉํ† ๋ฆฌ์–ผ์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„์ด ์†Œ์š”