๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Study/์ฝ”ํ…Œ

[ํ”„์ฝ”๋ฌธ] chpater2. ์‹œ๊ฐ„ ๋ณต์žก๋„

์‹œ๊ฐ„ ๋ณต์žก๋„๋ž€?

  • ์–ด๋Š ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋” ๋‚˜์€์ง€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ค€์ด ํ•„์š”ํ•จ
  • ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ •๋„๋ฅผ ๋ณต์žก๋„๋ผ๊ณ  ํ•จ
    • ์‹œ๊ฐ„ ๋ณต์žก๋„: ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”์ง€
    • ๊ณต๊ฐ„ ๋ณต์žก๋„: ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€
  • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋‘ ๋ณต์žก๋„์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด ํ•จ๊ป˜ ์ œ์‹œ๋จ → ๋ช‡ ์ดˆ/๋ช‡ MB ์ด๋‚ด
    • ๋ฌธ์ œ๋‚˜ ์–ธ์–ด๋งˆ๋‹ค ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์ด ๋‹ค๋ฅด์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค๋Š” ํŠน๋ณ„ํžˆ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์œผ๋ฉด ์ œํ•œ ์‹œ๊ฐ„์ด 10์ดˆ์ž„
    • 10์ดˆ??? … ์ด๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ € ์šฐ๋ฆฌ๊ฐ€ ์ง  ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‹œ๊ฐ„์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์žˆ์Œ

๋น…์˜ค(Big-O) ํ‘œ๊ธฐ๋ฒ•

  • SW๋‚˜ HW์  ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„ ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋ผ๋„ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฆ„
    • ์ด ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์„ ์ •ํ™•ํ•œ ์ˆ˜์น˜๋กœ ๋‚˜ํƒ€๋‚ด๊ธด ์–ด๋ ต์ง€๋งŒ, ๋ฌธ๋ฒ•์ด๋‚˜ ๊ตฌ์„ฑ์—์„œ ๋ฐœํ–‰ํ•˜๋Š” ๋น„์šฉ์„ ์ˆ˜์น˜ํ™”ํ•ด ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ํ•„์š”ํ•œ ์ด ์—ฐ์‚ฐ์˜ ์ˆ˜๋ฅผ ์ˆ˜ํ•™์ ์œผ๋กœ ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ์Œ ⇒ ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ•
      • 3๊ฐ€์ง€ ํ‘œ๊ธฐ๋ฒ• ์ค‘ ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉ. ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜๋Š” ๋น…์˜ค(Big-O) ํ‘œ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.
  • ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•: ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•ด๋‹น ์ฐจ์ˆ˜์ด๊ฑฐ๋‚˜, ๊ทธ๋ณด๋‹ค ๋‚ฎ์€ ์ฐจ์ˆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ์ ๊ทผ์  ์ƒํ•œ ํ‘œ๊ธฐ ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•จ
    • ์‰ฝ๊ฒŒ ‘์ตœ์•…์˜ ๊ฒฝ์šฐ ์ด ์ •๋„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค’๋กœ ์ดํ•ดํ•˜๋ฉด ๋จ
  • n² + 2n + 1์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n²)
  • 99n์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
    • ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ์ตœ๊ณ  ์ฐจํ•ญ์— ๋น„๋ก€ํ•˜๋Š” ํ๋ฆ„์„ ๋ณด์ธ๋‹ค๋ฉด ๋ถ€๊ฐ€์ ์ธ ์—ฐ์‚ฐ์€ ์‹ ๊ฒฝ ์“ธ ํ•„์š” ์—†์Œ(๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์—ฐ์‚ฐํšŸ์ˆ˜๊ฐ€ ์ฐจ์ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์€ ์ˆ˜๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Œ)
      • 4n²๊ณผ 4n์„ ๋น„๊ต: 10๋งŒ๊ฐœ ์ž…๋ ฅ → ์—ฐ์‚ฐ ํšŸ์ˆ˜: 400์–ต, 40๋งŒ ์ •๋„๋กœ ์ฐจ์ด ๋‚จ

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

 

  • ํ‘œ: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ˆ˜์— ๋”ฐ๋ฅธ ์—ฐ์‚ฐ ํšŸ์ˆ˜
  • 1, 2, 3, 4, 8, 16, 32, 64, 1000 .. : ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ˆ˜ n
  • ์—ฐ์‚ฐํšŸ์ˆ˜๊ฐ€ ํ‘œ ์•„๋ž˜๋กœ ํ–ฅํ• ์ˆ˜๋ก ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚จ
  • ๋งŒ์•ฝ, ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ 10๋งŒ ๊ฐœ๊ณ , ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n²)์ด๋ผ๋ฉด 10๋งŒ x 10๋งŒ์œผ๋กœ 100์–ต ๋ฒˆ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋จ
    • ์ปดํ“จํ„ฐ๋Š” ๋ณดํ†ต 1์ดˆ์— 1์–ต๋ฒˆ ์—ฐ์‚ฐํ•˜๋ฏ€๋กœ ์ด ํ”„๋กœ๊ทธ๋žจ์€ ๋™์ž‘ํ•˜๋Š”๋ฐ 100์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ผ ์ˆ˜ ์žˆ์Œ
  • ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์ž…๋ ฅ๊ฐ’์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๊ฐ€ 10๋งŒ ๊ฐœ๋ผ๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(nlogn) ์ •๋„์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์•ผ ํ•จ → O(n²) ์‹œ๊ฐ„ ๋ณต์žก๋„์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€๋ฉด ๋†’์€ ํ™•๋ฅ ๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ด ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•จ
    • ๋”๋ณด๊ธฐ
      ๐Ÿค” ์™œ??
      ๐Ÿ’ก ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ n=10โต์ธ ์ƒํ™ฉ์—์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋น„๊ตํ•ด๋ณด์ž
      • O(nlogn) ์•Œ๊ณ ๋ฆฌ์ฆ˜:
        • logn์€ ๋Œ€๋žต logโ‚‚(10โต) ≈ 17 ์ •๋„
        • ๋”ฐ๋ผ์„œ O(nlogn)์˜ ๊ฒฝ์šฐ ์‹คํ–‰ ์‹œ๊ฐ„์ด 10โต × 17 ≈ 1,700,000 ์ •๋„์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋กœ ์ถ”์ •๋จ
      • O(n²) ์•Œ๊ณ ๋ฆฌ์ฆ˜ :
        • ๋งŒ์•ฝ O(n²) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์‹คํ–‰ ์‹œ๊ฐ„์ด 10โต × 10โต = 10¹โฐ = 10,000,000,000 (100์–ต) ๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ์š”๊ตฌํ•จ
        • ์ด๋Š” ์‹ค์ œ๋กœ๋Š” ๋งค์šฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ๋จ
      • ์‹œ๊ฐ„ ์ œํ•œ
        • ๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํ„ฐ๋Š” ์ดˆ๋‹น ์•ฝ 1์–ต ๋ฒˆ ์ •๋„์˜ ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •  
          • O(nlogn) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ 1,700,000๋ฒˆ์˜ ์—ฐ์‚ฐ์œผ๋กœ, 1์ดˆ ์•ˆ์— ์ถฉ๋ถ„ํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
          • ํ•˜์ง€๋งŒ O(n²) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ 10¹โฐ๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜์—ฌ, 100์ดˆ ์ด์ƒ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ
O(1) 
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ˆ˜ ํฌ๊ธฐ์™€ ๋ณต์žก๋„ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ์ƒ์ˆ˜(๊ณ ์ •๋œ ์‹œ๊ฐ„)์„ ๊ฐ€์ง€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ex) ๋‚ด๋ฆผ์ฐจ์ˆœ, ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ๋ฐ์ดํ„ฐ, ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฒ€์ƒ‰
O(logn)
  • ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง์•„์ง€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์•„์ฃผ ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ๋งค์šฐ ์งง์€ ์‹œ๊ฐ„์— ๋๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Œ
  • ex) ์ด์ง„ํƒ์ƒ‰ → ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ½์”ฉ ์ค„์–ด๋“ฌ
O(n)
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ˆ˜๋งŒํผ ์ •์งํ•˜๊ฒŒ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • O(n) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด 2๋ฒˆ ์ค‘์ฒฉ๋˜๋„๋ก ์œ ๋„ํ•˜๋Š” ๋ฌธ์ œ์—์„œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด O(n²)๊ฐ€ ๋˜์–ด ์‹œ๊ฐ„์ด ๋งค์šฐ ๊ธธ์–ด์ง€๋ฏ€๋กœ ํ•ญ์ƒ ์กฐ์‹ฌํ•ด์•ผ ํ•จ 
  • ex) ๋ฐฐ์—ด ํƒ์ƒ‰์ด๋‚˜ ์ดˆ๊ธฐํ™”, for๋ฌธ 1๊ฐœ ์‚ฌ์šฉ, ๋ฌธ์ž์—ด ํƒ์ƒ‰, ๋ฐ์ดํ„ฐ ์žฌ๊ตฌ์ถ• ๋“ฑ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋™์ž‘ ๋Œ€๋ถ€๋ถ„
O(nlogn)
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ˆ˜์— ๋น„๋ก€ํ•ด์„œ ์—ฐ์‚ฐ์ด ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ •๋ ฌ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ์ด ์ •๋„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•จ
  • ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ‘์ •๋ ฌ’ํ•˜๋ผ๋Š” ๋ฌธ์ œ๋ผ๋ฉด ์ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋๋‚ด์•ผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์Œ
  • O(n) × O(logn) ์ฒ˜๋Ÿผ ์กฐํ•ฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋˜ํ•œ ์ด ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ ์ƒ๊ฐ๋ณด๋‹ค ์ž์ฃผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž„
O(n²)
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ˆ˜์˜ ์ œ๊ณฑ๋งŒํผ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๋ฒ• ํฐ(10๋งŒ ๊ฐœ ์ด์ƒ) ๋ฌธ์ œ์—์„œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋†’์€ ํ™•๋ฅ ๋กœ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋จ
  • ์ž์ฃผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋Œ€๋ถ€๋ถ„ ์—ฌ๊ธฐ์— ์†ํ•จ ⇒ ์ด ์ •๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ผ๋ฉด ๊ดœ์ฐฎ๊ฒ ์ง€ ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์•ˆ๋จ → n²๊ธฐ๋ฐ˜์œผ๋กœ ์—ฐ์‚ฐํ•˜๋ฉด ๋‹ค๋ฅธ ๋ถ€๊ฐ€ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ๋ถ€๋‹ด๋˜๋ฏ€๋กœ, ์ „๋žต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•จ ex) for๋ฌธ 2๊ฐœ ์ค‘์ฒฉ, ๋ฐฐ์—ด๋ผ๋ฆฌ ๊ฐ’ ๋น„๊ตor์กฐ์ž‘, 2์ฐจ์› ๋ฐฐ์—ด
O(2โฟ) ์ด์ƒ
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ์ •๋ง ์ €๊ฑฐ๋‚˜ ํŠน์ˆ˜ํ•œ ์กฐ๊ฑด์ด ์žˆ์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„
  • ๊ตฌํ•ด์•ผ ํ•˜๋Š” ์ˆซ์ž๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ด์ „ ๊ฒฐ๊ด๊ฐ’์„ ์ „๋ถ€ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚จ
  • ex) ํ”ผ๋ณด๋‚˜์น˜์˜ ์ˆ˜

์‹œ๊ฐ„ ๋ณต์žก๋„ ์„ ํƒ ์‹œ ์ฐธ๊ณ ํ•  ๋งŒํ•œ ์‚ฌํ•ญ

  1. ์ตœ๋Œ€ ์‹œ๊ฐ„์ด 1์ดˆ์ผ ๋•Œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ˆ˜์— ๋”ฐ๋ฅธ ์‹œ๊ฐ„ ๋ณต์žก๋„
    • 1,000๊ฐœ๋ผ๋ฉด → O(n²) ์ดํ•˜
      • 1000*1000=100๋งŒ
    • 10,000๊ฐœ๋ผ๋ฉด → O(n²) ๋ฏธ๋งŒ(์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ)
      • 10000*10000=1์–ต
    • 100,000๊ฐœ๋ผ๋ฉด → O(nlogn) ์ดํ•˜
      • logn์€ ๋Œ€๋žต logโ‚‚(10โต)≈17 ์ •๋„
      • 100000*17=1700000=๋ฐฑ ์น ์‹ญ๋งŒ
      • O(n²)์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, 10000000000์œผ๋กœ ๋ฐฑ์–ต..!
    • 1,000,000๊ฐœ๋ผ๋ฉด → O(nlogn) ๋ฏธ๋งŒ(๊ฐ€๊ธ‰์  O(n) ์ •๋„๋กœ)
      • logn์€ ๋Œ€๋žต logโ‚‚(10โต)≈17 ์ •๋„
      • 1000000*17=17000000=์ฒœ ์น ๋ฐฑ๋งŒ
    • ๊ทธ ์ด์ƒ์ด๋ผ๋ฉด → ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ๋ฐฑ๋งŒ ๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ์œ ์‹ฌํžˆ ์‚ดํŽด๋ด๋ผ. ํŠน์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋„๋ก ์š”๊ตฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํผ
  2. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

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

์–ด๋ฆผ์ง์ž‘ํ•ด๋ณด๊ธฐ

  • ํ•ด๋‹น ๊ตฌ๊ตฌ๋‹จ๋งŒ ์—ฐ์‚ฐํ•˜๋Š” ๊ฒฝ์šฐ์™€, ํ•ด๋‹น ๊ตฌ๊ตฌ๋‹จ๋ถ€ํ„ฐ 9๋‹จ๊นŒ์ง€ ์ „๋ถ€ ์—ฐ์‚ฐํ•˜๋Š” ๊ฒฝ์šฐ
    • for๋ฌธ์„ 1๋ฒˆ ์ผ์œผ๋‹ˆ O(n)์ด๊ณ  for๋ฌธ์„ 2๋ฒˆ ์ผ์œผ๋‹ˆ O(n²)์ผ๊นŒ? → ์•„๋‹ˆ
    • ์ฃผ์–ด์ง„ ์ˆซ์ž์˜ 9๋‹จ๊นŒ์ง€๋งŒ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ 1๋ฒˆ ์ž…๋ ฅํ•˜๊ณ , 9๋ฒˆ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•จ
      • ์ž…๋ ฅ์ด 10๋งŒ ๊ฐœ๋ผ๋ฉด 10๋งŒ ๊ฐœ × 9์ด๊ณ , ์ด๋Š” ๊ณง 9n์ด๋ฏ€๋กœ O(n)์ด๋ผ๊ณ  ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Œ
    • ์ฃผ์–ด์ง„ ์ˆซ์ž๋ถ€ํ„ฐ 9๋‹จ๊นŒ์ง€ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ 1~9 ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ํ•„์š”ํ•˜๋ฏ€๋กœ, ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ์ƒ์ •ํ•˜์—ฌ 1์ด ์ž…๋ ฅ์ด๋ผ๋ฉด 10๋งŒ ๊ฐœ × 9(1๋‹จ๋ถ€ํ„ฐ 9๋‹จ) × 9๊ฐ€ ๋˜์–ด 81n์ด ๋˜๋ฏ€๋กœ ์—ญ์‹œ O(n)์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌ๊ตฌ๋‹จ์˜ ๊ฒฝ์šฐ ํ•ญ์ƒ ๋™์ผํ•œ ์—ฐ์‚ฐ๋Ÿ‰์„ ๊ฐ€์ง€๋ฏ€๋กœ ์ž…๋ ฅ ๊ฐœ์ˆ˜์— ์˜ํ–ฅ์„ ๋ฐ›๊ณ , ๋”ฐ๋ผ์„œ O(n) ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์˜ค์ฐจ ๋ฒ”์œ„ ์ด๋‚ด๋กœ ๊ท€๊ฒฐ๋œ๋‹ค๋Š” ์ ์„ ์•Œ ์ˆ˜ ์žˆ์Œ
    • ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ ์ข€ ๋ณต์žกํ•œ ์—ฐ์‚ฐ์„ ํ–ˆ๋”๋ผ๋„ ์„ฃ๋ถ€๋ฅด๊ฒŒ O(n²)์ด๋ผ ๋‹จ์ • ์ง€์„ ํ•„์š” ์—†์Œ → ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์€ ์ฝ”๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•˜๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€์— ๋Œ€ํ•ด ๋น ๋ฅด๊ฒŒ ๊ฐ์„ ์žก๊ธฐ ์œ„ํ•œ ์ •๋Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด์ง€, ์ •ํ™•ํ•œ ์ธก์ • ์‹œ๊ฐ„์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ‘œ๊ธฐ๋ฒ•์ด ์•„๋‹˜

๋‚ด์žฅ ํ•จ์ˆ˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

๋ฆฌ์ŠคํŠธ(list; [ ])

โ€ป b-a๋ผ์„œ O(n) ‘๋ฏธ๋งŒ’์ž„. ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ์ƒ์ •ํ•˜์—ฌ O(n)์œผ๋กœ ํ‘œ๊ธฐํ•จ

์ง‘ํ•ฉ(set; { })

๋”•์…”๋„ˆ๋ฆฌ(dictionary; { })

์‹œ๊ฐ„ ๋ณต์žก๋„ ์ค„์ด๊ธฐ

  • ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ์‹œ๊ฐ„ ๋ณต์žก๋„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•
    1. ์ž…๋ ฅ ๊ฐœ์ˆ˜๋ฅผ ๋ณด๊ณ  ๊ทธ์— ๋งž๋Š” ์ ์ ˆํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜๊ธฐ
    2. ์ž๋ฃŒํ˜•์ด๋‚˜ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ
    3. ๋ฐ˜๋ณต๋ฌธ์„ ์ค„์ด๊ธฐ

readline(): ์ž…๋ ฅ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฒฝ์šฐ ์ž…๋ ฅ๊ฐ’์„ ๋ชจ๋‘ ์ฃผ๊ณ , ์›ํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๋Š” ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ ์‹œ์ž‘ ์ฝ”๋“œ๊ฐ€ ์ฃผ์–ด์ง€์ง€๋งŒ, ์‹ค์ œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ ๋•Œ๋Š” ์ž…๋ ฅ ๊ฐ’์„ ๋ฐ›๋Š” ์ฝ”๋“œ๋„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ
  • sys ๋ชจ๋“ˆ์˜ readline()์„ ํ™œ์šฉ
    • input() ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ํšจ์œจ์ด ๋–จ์–ด์ง
    import sys
    data = sys.stdin.readline()
    

๋ฆฌ์ŠคํŠธ ๊ณฑ์…ˆ: ์ดˆ๊ธฐํ™”์™€ ํ• ๋‹น์„ ๋น ๋ฅด๊ฒŒ

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐฐ์—ด(๋ฆฌ์ŠคํŠธ)์„ ๋‹ค๋ฃฐ ๋•Œ ๋™์ ์œผ๋กœ ๋‹ค๋ฃจ์ง€๋งŒ, ๊ฐ€๋” ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด ๋†“์€ ๊ณ ์ • ๋ฐฐ์—ด์—๋‹ค๊ฐ€ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ
    • ์ด๋Ÿด ๋•Œ ๋ฆฌ์ŠคํŠธ์— ๊ณฑ์…ˆ ์—ฐ์‚ฐ์„ ํ•˜์—ฌ ์ดˆ๊ธฐํ™”์™€ ํ• ๋‹น์„ ๋™์‹œ์— ์ง„ํ–‰ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
    data1 = [0 for _ in range(1000)]
    data2 = [0] * 1000
    
    • data1์˜ ๊ฒฝ์šฐ for ๋ฌธ์„ 1,000๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๋ฆฌ์ŠคํŠธ์— 0์„ ์ง‘์–ด๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— O(n)๋งŒํผ ์†Œ๋ชจ๋˜์ง€๋งŒ, data2์˜ ๊ฒฝ์šฐ [0]์„ 1,000๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์ „๋ถ€์ด๋ฏ€๋กœ O(n) ์‹œ๊ฐ„์œผ๋กœ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

๋ฌธ์ž์—ด ํ•ฉ์น˜๊ธฐ: ‘ ’.join()์„ ์“ฐ๊ณ  +๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ง

  • +๋กœ ํ•ฉ์น  ๊ฒฝ์šฐ ๊ฐ๊ฐ์˜ ๋ฌธ์ž์—ด์„ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค์ƒ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n²) ์ •๋„๊ฐ€ ๋จ

์กฐ๊ฑด๋ฌธ ์—ฐ์‚ฐ ์ค„์ด๊ธฐ: ์งง์€ ๊ฒƒ๋ถ€ํ„ฐ ๋จผ์ € ๊ณ„์‚ฐํ•˜์ž

  • if ์กฐ๊ฑด๋ฌธ์—์„œ ๋‹ค์ค‘ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ์กฐ๊ฑด ์ค‘ ๋นจ๋ฆฌ ์‹คํ–‰๋˜๋Š” ์ชฝ์„ ์•ž์ชฝ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•จ
    • and ์—ฐ์‚ฐ์„ ํ•  ๋•Œ ์•ž์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ False๋ผ๋ฉด ๋’ค์˜ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋„˜์–ด๊ฐ
    • or ๋˜ํ•œ ์•ž์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ True๋ผ๋ฉด ๋’ค์˜ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ

์Šฌ๋ผ์ด์‹ฑ: ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ตœ์†Œ๋กœ

  • ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ์šด์ž์—ด๊ณผ ๊ฐ™์€ ์ž๋ฃŒํ˜•์— ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด ์ผ๋ถ€๋ถ„๋งŒ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋Šฅ
  • ex) a[start : end : step] ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•จ
    • start: ์‹œ์ž‘ ์œ„์น˜(์ž์‹  ํฌํ•จ), ์ˆซ์ž ์ƒ๋žตํ•˜๋ฉด ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ๋ถ€ํ„ฐ๋กœ ์ธ์‹
    • end: ๋๋‚ผ ์œ„์น˜(์ž์‹  ํฌํ•จx), ์ˆซ์ž ์ƒ๋žตํ•˜๋ฉด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰๊นŒ์ง€๋กœ ์ธ์‹
    • step: ๊ฐ„๊ฒฉ(๊ธฐ๋ณธ์€ 1), ์Œ์ˆ˜๋ฅผ ๋„ฃ๊ฒŒ ๋˜๋ฉด ๋งจ ๋์—์„œ๋ถ€ํ„ฐ ์ธ๋ฑ์Šค๋ฅผ ํƒ์ƒ‰ํ•จ
      • a[-1 : -3] : ๋งจ๋์—์„œ๋ถ€ํ„ฐ ๋งจ ๋์—์„œ ๋‘ ๋ฒˆ์งธ ์š”์†Œ๊นŒ์ง€ ๊ฐ€์ ธ์˜ด
# ๋ฌธ์ž์—ด ์Šฌ๋ผ์ด์‹ฑ
print('Python is awesome'[3::2])

# 2์ฐจ์›, 3์ฐจ์› ๋ฐฐ์—ด ์Šฌ๋ผ์ด์‹ฑ
data = [[(0, 1), (2, 3), (4, 5)], [(6, 7), (8, 9), (0, 1)]]
print(data[1:][0][::2])
  • ์ด ์™ธ์—๋„ for ๋ฌธ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉํ•˜๊ธฐ: ์†๋„์™€ ์•ˆ์ •์„ฑ ๋ชจ๋‘ ์žก๊ธฐ

  • heapq
    • ์ด์ง„ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์ตœ์†Œ ํž™ ์ž๋ฃŒ ๊ตฌ์กฐ
    • ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ๊ฐ’์˜ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ์ด๋ฃจ์–ด์ง
    • ์šฐ์„ ์ˆœ์œ„ ํ๋‚˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋จ
  • collections
    • ์—ฐ์†๋˜๋Š” ์ž๋ฃŒ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž๋ฃŒํ˜•์—์„œ ๋™์ผํ•œ ์›์†Œ๊ฐ€ ๋ช‡ ๊ฐœ ์ž‡๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•œ counter๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์œ ์šฉํ•จ
    • ์ถ”๊ฐ€๋กœ ๋ฑ(dequeue) ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” deque๋„ ์žˆ์Œ
  • itertools
    • ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋ฌธ์ œ์— ์‚ฌ์šฉํ•˜๋ฉฐ ์ˆœ์—ด, ์กฐํ•ฉ, ์ค‘๋ณต์ˆœ์—ด, ์ค‘๋ณต์กฐํ•ฉ ๋“ฑ์— ์‚ฌ์šฉํ•จ
  • math
    • ๋ณต์žกํ•œ ์ˆ˜ํ•™ ์—ฐ์‚ฐ์„ ๋Œ€์‹ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜, ํŒฉํ† ๋ฆฌ์–ผ, ์ œ๊ณฑ๊ทผ, ๋กœ๊ทธ ๋“ฑ์„ ๊ณ„์‚ฐํ•˜๋ฉฐ, ํŒŒ์ด, ์ž์—ฐ์ƒ์ˆ˜์™€ ๊ฐ™์€ ์ƒ์ˆ˜๋„ ์กด์žฌํ•จ
  • bisect
    • ์ด์ง„ ํƒ์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ
    • ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ํŠน์ • ๋ฒ”์œ„ ์•ˆ์— ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ ๋ช‡ ๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š”๋ฐ ์œ ์šฉํ•จ

๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ vs ์ œ๋„ˆ๋ ˆ์ดํ„ฐ: ํŽธ์˜์„ ์™€ ํšจ์œจ์˜ ๋Œ€๊ฒฐ

  • ๋ฆฌ์ŠคํŠธ์— 1๋ถ€ํ„ฐ 10๊นŒ์ง€ ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ
    • for ๋ฌธ
    • data = [] for i in range(1, 11): data.append(i)
    • ์ปดํ”„๋ฆฌํ—จ์…˜(comprehension) ์‚ฌ์šฉ → ์ฝ”๋“œ ํ•œ ์ค„๋กœ ์ค„์ด๊ธฐ
    • [i for i in range(1, 11)]

 

๐Ÿ’ก ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ ์‚ฌ์šฉํ•˜๊ธฐ

  • ์„ ์–ธ → ํ• ๋‹น → ์žฌ๊ตฌ์„ฑ ๊ณผ์ •์„ ํ•œ ์ค„์— ๋ชจ๋‘ ๋๋‚ผ ์ˆ˜ ์žˆ์Œ
  • ์‹œ๊ฐ„์€ O(n)
  • ์—ฌ๋Ÿฌ ์ค„๋กœ ๋ฐ”๊ฟ” ์จ๋„ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€ ์•Š์•„์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ์Œ
[(๋ณ€์ˆ˜ ํ‘œํ˜„์‹) for (์‚ฌ์šฉํ•  ๋ณ€์ˆ˜) in (์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ)]

# ์กฐ๊ฑด๋ฌธ ์ถ”๊ฐ€ - ์ง์ˆ˜๋งŒ ๋ฝ‘๊ธฐ
[i for i in range(11) if i % 2 == 0]

# if๋ฌธ ์ค‘์ฒฉ (and๋กœ ์ทจ๊ธ‰) - ์ง์ˆ˜์™€ 5์˜ ๋ฐฐ์ˆ˜ ๋™์‹œ ๋งŒ์กฑํ•˜๋Š” ์ˆซ์ž ๊ตฌํ•˜๊ธฐ
[i for i in range(11) if i % 2 == 0 if i % 5 == 0]

 

  • ๊ทธ๋Ÿฌ๋‚˜ ์ปดํ”„๋ฆฌํ—จ์…˜์€ ๋ฐ์ดํ„ฐ๊ฐ€ 10๋งŒ ๊ฐœ, 100๋งŒ ๊ฐœ ์žˆ์„ ๋•Œ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ฒŒ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ํ–ˆ๋˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ ๋ คํ•˜๊ฒŒ ํ•˜๋Š” ์›์ธ์ด ๋˜๊ธฐ๋„ ํ•จ
    • ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์€ ๋Œ€๋ถ€๋ถ„ ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ปค์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ
    ⇒ ์ด์— ๋Œ€ํ•œ ๋Œ€์‘์ฑ…์œผ๋กœ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ(generator)๋ฅผ ์‚ฌ์šฉํ•จ

 

๐Ÿ’ก ์ œ๋„ˆ๋ ˆ์ดํ„ฐ

  • ์—ฐ์† ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • ์‹คํ–‰ ์ค‘ yield๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋” ์ด์ƒ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด next()๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋Œ€๊ธฐํ•จ
    • ์ฆ‰, ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ์— ๋Œ€ํ•œ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์—ˆ๋‹ค๊ฐ€ ๋‹ค์Œ next()๋ฅผ ๋Œ€๊ธฐํ•˜๋ฉด์„œ ์‹คํ–‰์ด ๋ฉˆ์ถค
  • ์žฅ์ : ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ํ•  ๊ฒƒ์ด ๋งค์šฐ ๋งŽ์•„๋„ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ญ์ƒ ๊ณ ์ •๋œ ๊ฐ’์„ ์ง€๋‹˜
  • ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
    1. ํ•จ์ˆ˜ ์ •์˜ํ•  ๋•Œ return ๋Œ€์‹  yield ์‚ฌ์šฉ
    2. ์ปดํ”„๋ฆฌํ—จ์…˜ ๋ฌธ๊ตฌ๋ฅผ ์†Œ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์คŒ
# 1๋ถ€ํ„ฐ 10๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ , ์ง์ ‘ next()๋ฅผ ํ˜ธ์ถœํ•ด์•ผ 1, 2, 3์˜ ๊ฐ’์ด ๋ฐ˜ํ™˜๋จ
# ์ด๋•Œ ์ด์ „ ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ , ํ•„์š”ํ•˜๋‹ค๋ฉด ๋”ฐ๋กœ list() ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋˜๋Š” ๊ฐ’์„ ์ €์žฅํ•ด์•ผ ํ•จ
(i for i in range(11))

 

๋ฐ์ดํ„ฐ ๋Œ๋ ค์“ฐ๊ธฐ: ์ค‘๋ณต ํ”ผํ•˜๊ธฐ

  • ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ ๋‚ญ๋น„๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์˜๋ฏธ ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๋‚˜ ์—ฐ์‚ฐ์ด ๋ฐœํ–‰ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•จ
# ์ˆ˜์ • ์ „
def solution(data):
	answer = data
	
	for i in range(len(answer)):
		temp = answer[i] * answer[i]
		answer[i] = temp
		
	return answer
	
# ์ˆ˜์ • ํ›„
def solution(data):
	return [i * i for i in data]

์—ฌ๋Ÿฌ ์ƒํ™ฉ์—์„œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ ์ƒ๊ฐํ•ด๋ณด๊ธฐ

์–ด์จŒ๋“  ๋ฐ˜๋ณต๋ฌธ์ด ๊ฐ€์žฅ ํฐ ํ•ต์‹ฌ

  • ๊ฐ€์žฅ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ฐพ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๊ณ , ์ด ๋ฐ˜๋ณต๋ฌธ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ์ž„
    • ๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด ํ•จ์ˆ˜๋ณ„๋กœ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์˜ˆ์ธกํ•ด ๊ฐ€์žฅ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ž‘์—…์„ ์ค„์ผ์ง€, ์•„๋‹ˆ๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์ตœ์ ํ™”ํ• ์ง€ ์ „๋žต์„ ์งœ๋Š” ๊ฒƒ์ž„
    • ์˜ˆ)
      • Aํ•จ์ˆ˜: ๋ฐฐ์—ด ์ •๋ ฌ - O(nlogn)
      • Bํ•จ์ˆ˜: ๋ฐฐ์—ด ์ˆœํšŒ - O(n)
      • Cํ•จ์ˆ˜: ๋‘ ๋ฐฐ์—ด ํ•จ๊ป˜ ์‚ฌ์šฉ - O(n²)
      • ๋งŒ์•ฝ ์ด ๋ฌธ์ œ๊ฐ€ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด, ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด Cํ•จ์ˆ˜๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ์œผ๋‹ˆ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ” ๊ฐœ์„ ํ• ์ง€, ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋…ผ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•ด ์ž‘์—…๋Ÿ‰์„ ์ค„์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ• ์ง€ ์„ ํƒํ•˜๋ฉด ๋จ

์ฐจ์ˆ˜์˜ ๊ณ„์ˆ˜ ์ƒ๋žตํ•˜์ง€ ์•Š๊ธฐ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ ์ธก์ •ํ•  ๋•Œ ‘O(n)๋„ค’, ‘O(nlogn)์ด๋„ค’,… ์ฒ˜๋Ÿผ ๋‹จ์ • ์ง“์ง€ ๋ง๊ณ  ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์— ์˜ํ•ด ์ƒ๋žต๋˜๋Š” ์ฐจํ•ญ์˜ ๊ณ„์ˆ˜๋„ ๊ผผ๊ผผํ•˜๊ฒŒ ๋”ฐ์ ธ๋ณด์ž
  • ์—ฌ๋Ÿฌ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์—ฎ์ด๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์‹ค์ œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•˜๋Š” ์ผ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ญ‰๋šฑ๊ทธ๋ ค์„œ ํ‘œํ˜„ํ•˜๊ธฐ๋ณด๋‹จ ์ฐจ์ˆ˜์˜ ๊ณ„์ˆ˜๊นŒ์ง€ ๋ชจ๋‘ ๊ณ„์‚ฐํ•˜์—ฌ ๊ณ ๋ คํ•˜์ž
  • ์˜ˆ) 3n³ + 5n²์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n³)์ž„
    • 1์ดˆ ์ œํ•œ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค๋ฉด O(n³)์˜ ์ตœ๋Œ€ ์ž…๋ ฅ ๊ฐœ์ˆ˜๋Š” 500๊ฐœ ์ •๋„๊ฐ€ ๋จ (500³ = 125,000,000 = 1์–ต 2์ฒœ 5๋ฐฑ๋งŒ ) (1์ดˆ์— 1์–ต๋ฒˆ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ)
    • ๋ฌธ์ œ์—์„œ ์ž…๋ ฅ ๊ฐœ์ˆ˜๊ฐ€ 500๊ฐœ ์ฃผ์–ด์กŒ๊ณ , ์ฝ”๋“œ๋ฅผ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๊ณ„์‚ฐํ•ด๋ณด๋‹ˆ O(n³)๊ฐ€ ๋‚˜์™€ ์ œ์ถœํ–ˆ์ง€๋งŒ, ์‹คํŒจํ•จ..
    • ์ด์œ : ์‹ค์ œ 3n³์€ 200๊ฐœ๋„ ๊ฐ๋‹นํ•˜๊ธฐ ์–ด๋ ค์›€..

ํฌ๊ธฐ N๊ณผ ํฌ๊ธฐ M์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐ

  • ํฌ๊ธฐ๊ฐ€ N๊ณผ M์ธ ๋‘ ๋ฐ์ดํ„ฐ๋กœ ์—ฐ์‚ฐํ•  ๋•Œ O(n²)? O(n³)?
    • ('์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐํ•˜๊ธฐ - ์–ด๋ฆผ์ง์ž‘ํ•ด๋ณด๊ธฐ' ๋ถ€๋ถ„ ์ฐธ๊ณ )
    for i in N:
    	for j in M:
    		...
    
    • ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ ธ๋ณด์ž - N์˜ ๊ฐ’์€ ๊ณ ์ •์ด๊ณ , M์˜ ๊ฐ’์ด ๋ณ€ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž
      1. M์ด ๋งค์šฐ ์ ์€ ์ˆซ์ž์ผ ๊ฒฝ์šฐ(~20)
        • M์˜ ์—ฐ์‚ฐ์€ ์‚ฌ์‹ค์ƒ ์ƒ์ˆ˜ ์‹œ๊ฐ„ ์ด๋‚ด๋กœ ๋๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ์—ฐ์‚ฐ์ด ํฐ O(n)์œผ๋กœ ๋ด๋„ ๋ฌด๋ฐฉํ•จ
      2. M์ด ์–ด๋Š ์ •๋„ ํฐ ์ˆซ์ž์ผ ๊ฒฝ์šฐ(~100)
        • N × M์ด N²์„ ๋„˜์–ด์„œ์ง€ ์•Š๋Š”๋‹ค๋ฉด N × M์œผ๋กœ ๊ณ„์‚ฐํ•ด์•ผํ•จ
      3. M์ด N๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๋งค์šฐ ํฐ ์ˆซ์ž์ผ ๊ฒฝ์šฐ
        • ์ž…๋ ฅ ๊ฐœ์ˆ˜์˜ ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฆ„์—†์œผ๋ฏ€๋กœ ์ด ์‹œ์ ๋ถ€ํ„ฐ๋Š” O(n²)์œผ๋กœ ์ทจ๊ธ‰ํ•ด์•ผ ํ•จ
                                                        •