Skip to content

is2js/python_algorithm

Repository files navigation

alt text alt text

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๐Ÿ“‚(folder/) ๐Ÿ“œ (.ipynb) ๐Ÿ(.py)

  • ๐Ÿ“‚ 00_algorithm_paradigm
    • ๐Ÿ“œ concept01~06 : ์˜ˆ์ œ๋ฅผ ํ†ตํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜๋ณ„ ๊ฐœ๋…์ •๋ฆฌ(Codeit, Leetcode, ์ฃผ๋‹ˆ์˜จTV)
    • ๐Ÿ“œ practice01~06 : ์˜ˆ์ œ๋ฅผ ํ†ตํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜๋ณ„ Lv1~3 ๋ฌธ์ œํ’€์ด(Codeit, Leetcode)
    • ๐Ÿ concept6-3-1 ~ 6-3-6: concept06์˜ ์ฝ”๋“œ๋งŒ ์ •๋ฆฌ(์ฃผ๋‹ˆ์˜จTV)
  • ๐Ÿ“‚ 01_codeup: ๐Ÿ Codeup๊ธฐ์ดˆ 100์ œ ์ค‘ ๋งˆ์ง€๋ง‰ ๋ฐฐ์—ด๋ฌธ์ œ๋“ค(6092~6098)
  • ๐Ÿ“‚ 02_boj_step_to_12: ๐Ÿ ๋ฐฑ์ค€ ๋‹จ๊ณ„๋ณ„๋ฌธ์ œ์ง‘ 12๋‹จ๊ณ„๊นŒ์ง€-์‹œ๊ฐ„์ดˆ๊ณผ or ํ‹€๋ฆฐ๋ฌธ์ œ ํ’€์ด
  • ๐Ÿ“‚ 03_Datastructure: ๐Ÿ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ python Class๋กœ ๊ตฌํ˜„ํ•œ code
  • ๐Ÿ“‚ 04_problems_by_class: ๐Ÿ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜๋ณ„๋กœ ํšŒ๊ณ (๋А๋‚€์ )์„ ๊ธฐ๋กํ•˜๋ฉด์„œ ํ’€์ด(~ing)
  • ๐Ÿ“‚ 05_programmers: ๐Ÿ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ๋ฅผ ํ’€์ด(~ing)
  • ๐Ÿ“‚ 06_regex_practice: ๐Ÿ ์ •๊ทœํ‘œํ˜„์‹ ์—ฐ์Šต ๋ฐ ๋ชจ๋“ˆ๋งŒ๋“ค๊ธฐ(~ing)

00๋ ˆํฌ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ํ‘ธ๋Š” ์š”๋ น

  1. ์ •๋ ฌ๊ณผ ํƒ์ƒ‰ : ์„ ํ˜•/์ด์ง„ํƒ์ƒ‰ + ์„ ํƒ/์‚ฝ์ž…์ •๋ ฌ
  2. Brute Force : ์ „์ฒด ๋‹ค ์‚ดํŽด๋ณด๋Š” ๋ฐฉ์‹์˜ ๋ฌธ์ œ
  3. Divide and Conquer : ์žฌ๊ท€ ๋“ฑ ๋ถ€๋ถ„๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ดํŽด๋ณด๊ธฐ
  4. Dynamic Programming : ๋ถ€๋ถ„๋ฌธ์ œ + ์ค‘๋ณต๋˜๋Š” ๋ฌธ์ œ๋ฅผ memo(dict, ๋ถ€๋ถ„๋ฌธ์ œ ์—†์ด ๋„ฃ๊ณ  ์ €์žฅ) or tabulation(list, base index ๋„ฃ์–ด๋†“๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ, ๋ถ€๋ถ„๋ฌธ์ œ๊ฐ€ list[k-1] ๋“ฑ)๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ
  5. Greedy Algorithm : ๋ถ€๋ถ„๋ฌธ์ œ + ๊ฐ ๋ถ€๋ถ„์ด ์ตœ๋Œ€๊ฐ’์„ ์„ ํƒํ–ˆ์„ ๋•Œ๊ฐ€ ์ •๋‹ต
  6. ๊ธฐํƒ€ ๋“ฑ ๊ตฌํ˜„ : ๋ฐฐ๊ฒฝ์ง€์‹์ด ํ•„์š”ํ•œ ๊ธฐ์ดˆ ๊ตฌํ˜„ ๋ฌธ์ œ(์ฃผ๋‹ˆ์˜จTV)
    • ์†Œ์ˆ˜ ํŒ๋ณ„(isPrime2) / ์†Œ์ˆ˜ ์นด์šดํŒ…(์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด) countPrimes2, findPrimes / ์†Œ์ธ์ˆ˜๋ถ„ํ•ด factorize2, ์ค‘๋ณต์ œ๊ฑฐ ์†Œ์ธ์ˆ˜ ๋ชจ์Œ findFactors / ๊ณตํ†ต ์†Œ์ธ์ˆ˜ commonFactors -> gcd2 ๊ณตํ†ต์†Œ์ธ์ˆ˜๋“ค์˜ ๋ˆ„์ ๊ณฑ/ math.gcd์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ lcm, lcmFromTo / ๋‹ฌ๋ ฅ๋งŒ๋“ค๊ธฐ - ์œค๋…„ํŒ๋‹จ(for2์›”์ผ์ˆ˜) leapyear, ์ด๋ฒˆ๋‹ฌ์˜ ์ผ์ˆ˜ daysOfMonth, ํ•ด๋‹น์›” 1์ผ์˜ ์š”์ผ=์‹œ์ž‘์š”์ผ dayOfTheWeek, ์ „์ฒด๋‹ฌ๋ ฅ์ถœ๋ ฅ printCalendar /
  7. ์ถ”๊ฐ€ ๊ธฐํƒ€ ๊ตฌํ˜„ : ์ฝœ๋ผ์ธ ์˜ ์ถ”์ธก collatz(n) / ๋กœ๋งˆ์ˆซ์ž๋ฅผ ์•„๋ผ๋น„์•„ ์ˆซ์ž๋กœ toArabicNumber, ์•„๋ผ๋น„์•„์ˆซ์ž๋ฅผ ๋กœ๋งˆ์ˆซ์ž๋กœ toRomanNumber / ์Šค๋ฌด๊ณ ๊ฐœ binary_guess, binary_guess_count/ ํ™€์ˆ˜ ๋งˆ๋ฐฉ์ง„ ๊ฒ€์‚ฌ checkMagic(square), NxN ํ™€์ˆ˜ ๋งˆ๋ฐฉ์ง„ ๋งŒ๋“ค๊ธฐ makeMagicSquare(n) / i๋ถ€ํ„ฐ ๋๊นŒ์ง€์˜ ๋ฐฐ์—ด์˜ ํ•ฉ(์žฌ๊ท€) sumOfArray(array, i)
0 [sort]์‹œ ์ง์ „์• ๋“ค๊ณผ ๋น„๊ตํ•˜๋Š”, ์‚ฝ์ž…์ •๋ ฌ ๊ฐ™์€ ๊ฒฝ์šฐ, 0~i-1๊นŒ์ง€๋Š” ์ด๋ฏธ ์ •๋ ฌ๋œ ์ƒํƒœ์ธ ๊ฒƒ์„ ์ƒ๊ฐํ•˜์ž.
 -> ์ •๋ ฌ์—์„œ i๋ฒˆ์งธ? i-1๊นŒ์ง€๋Š” ์ด๋ฏธ ์ •๋ ฌ๋œ ์ƒํƒœ์ด๋‹ค! ์ง์ „๊นŒ์ง€๋Š” ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ  i๋ฒˆ์žฌ ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ฉ๋ฅ˜์‹œ์ผœ ๋ฌถ์–ด์„œ ์ •๋ ฌํ•˜๋Š” ์‚ฝ์ž…์ •๋ ฌ.
 -> ์‚ฝ์ž…์ •๋ ฌ: ๊ฐ i๋ฒˆ์งธ ๊ฐ’์— ๋Œ€ํ•˜์—ฌ -> i=j์™€ j-1์„ j๋ฒˆ์งธ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•ด shift๋ฅผ ๋๋‚ธ ๋’ค, i๋ฒˆ์งธ๊ฐ’ value์˜ ์œ„์น˜๋ฅผ ๋ผ์›Œ๋„ฃ์–ด์ฃผ๋Š” ์ „๋žต์„ ์“ด๋‹ค.
 ->-> shift๋Š” for i๋ฅผ ๊ณ ์ •(i๋ฒˆ์งธ shift์˜ ๊ธฐ์ค€ value๋งŒ ๊ณ ์ •)์‹œํ‚จ ์ƒํƒœ์—์„œ, j=i + while j-1๋ฅผ ์ด์šฉํ•œ shift ์กฐ๊ฑด + j-=1 ๋“ฑ์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜.
 -> ํ•ฉ๋ฒ™์ •๋ ฌ: list๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋’ค, ๊ฐ ๋ถ€๋ถ„๋ฌธ์ œ๋กœ ์ •๋ณตํ–ˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—, list1๊ณผ list2๋ฅผ ์ธ๋ฑ์Šคi,j๋ฅผ ๋™์‹œ์— while์—์„œ ๋Œ๋ฉด์„œ ์ž‘์€ ์ˆœ๋Œ€๋กœ ๋ฝ‘์•„ ์ •๋ ฌ
 --> i์™€ j๋ฅผ ๋™์‹œ์— <๋น„๊ตํ•ด๊ฐ€๋ฉฐif>๋ˆ๋‹ค๋ฉด, fori forj๊ฐ€ ์•„๋‹ˆ๋ผ while๋กœ ๊ฐ™์ด ๋Œ๋ฆฌ๋ฉฐ + if ๊ฐ ์กฐ๊ฑด์— ๋งž๊ฒŒ if i+=1  else j+=1 or i+=1, j+=1์ž‘์ „์„ ์“ด๋‹ค. ์ด๋Ÿฌํ•œ ์ˆ˜๋ฒ•์€ GCD by ์†Œ์ธ์ˆ˜๋ถ„ํ•ด ์‹œ์—๋„ ๋“ฑ์žฅํ•œ๋‹ค.
 --> ์ฆ๊ฐ€ํ•˜๋Š” index์— ๋Œ€ํ•˜์—ฌ while < N and <M ์€ ๋‘˜ ์ค‘์— ํ•˜๋‚˜๋ผ๋„ ๋จผ์ € ๋๋‚˜๋ฉด while๋ฌธ๋„ ์ข…๋ฃŒ๋œ๋‹ค. -> ๋‹ค๋ˆ ๊ฒƒ์ด๋ฏ€๋กœ ๋‚˜๋จธ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒƒ๋„ ์ฑ™๊ฒจ์ฃผ์ž.
 --> while i < and j < ๋ฅผ ๋™์‹œ์— ๋Œ๋ฉด์„œ ์กฐ๊ฑด๋„ ๋™์‹œ์— ์žˆ๋‹ค๋ฉด, ๋‘˜ ์ค‘์— ํ•˜๋‚˜๊ฐ€ ๋๋‚˜๋ฉด ๋์ธ๊ฒฝ์šฐ๋‹ค -> ๋ญ๊ฐ€ ๋จผ์ € ๋๋‚˜๋Š”์ง€ ๋‹ค๋Œ๊ณ  ํŒ๋‹จํ•ด์ฃผ๋Š” sense
 --> if๋‹ด์— ๋ฌด์กฐ๊ฑด else๋งŒ ์ƒ๊ฐX ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์˜์ˆ˜๋„ ์žˆ๋‹ค๋ฉด elif ์กฐ๊ฑด๋งŒ ์ฃผ์ž. else๋Š” ๋ชจ๋“  ๋ฐฐ๋ฐ˜์˜ ๊ฒฝ์šฐ๋ผ์„œ.. ์ฐ์ฐ.
 -> ํ€ต์ •๋ ฌ : list๊ฐ€ ํ•จ์ˆ˜๋‚ด๋ถ€์—์„œ๋„ ์ ‘๊ทผ๋˜๋Š” ๊ฒƒ์„ ์ด์šฉํ•˜์—ฌ return์ด ์—†๋Š” ์žฌ๊ท€๋ฌธ์ œ๊ฐ€ ๋จ. list์˜ ๋งจ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ๊ธฐ์ค€(pivot)์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ทธ๋ณด๋‹ค ์ž‘์€ ๊ทธ๋ฃน + pivot + ํฐ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ ์„œ divide๋ฅผ ํ•จ์ˆ˜๋‚ด๋ถ€์—์„œ ํ•ด์ฃผ๊ณ , small๊ทธ๋ฃน๊ณผ big๊ทธ๋ฃน์„ ๊ฐ๊ฐ ๋ถ„ํ• ์ •๋ณตํ•จ. ๊ฐ€์šด๋ฐ pivot์€ ๊ฐ€์šด๋ฐ์„œ ์œ ์ง€๋˜๋ฉฐ index๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š”๋ฐ, ๊ทธ index๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ€๋ถ„๋ฌธ์ œ๋“ค input์ด ๋จ.
 --> index๋ฅผ input๋กœํ•˜๋Š” ๋ถ€๋ถ„๋ฌธ์ œ๋“ค์€, base case๋ฅผ ์ •๋ ฌํ•ด์•ผ๋  ๊ฐฏ์ˆ˜(end-start+1)๊ฐ€ 1๊ฐœ ์ดํ•˜๋ฉด ์ •๋ ฌ์•ˆํ•ด๋„๋œ๋‹ค. ์ž๊ธฐ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์•„๋ฌด๊ฒƒ๋„ ์•ˆํ•˜๊ฑฐ๋‚˜.
 -> ํ€ต์ •๋ ฌ : input์ด index์ด๋ฉฐ ๋ถ€๋ถ„ ๋ฌธ์ œ์—์„œ๋Š” ์ค„์–ด๋“  ๊ฐ’์ด ๋“ค์–ด๊ฐ€์•ผํ•œ๋‹ค. def func(default=์ƒ์ˆ˜, ์ƒ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉด default=None์ฃผ๊ณ  ํ•จ์ˆ˜๋‚ด๋ถ€์—์„œ ํ™•์ธ)ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ, `default๊ฐ’์€ ์žˆ์–ด์„œ ์•ˆ์ค˜๋„ ๋˜๋Š”๋ฐ(ํ˜ธ์ถœ์‹œ ์ž…๋ ฅX), ํ˜น์‹œ๋ผ๋„ ๊ฐ’์„ ์ค„๊ฑฐ๋ฉด(๋‚ด๋ถ€์—์„œ ์žฌ๊ท€์ ์œผ๋กœ ๋ถ€๋ถ„๋ฌธ์ œ ํ’€๋ฉด์„œ ์ž…๋ ฅ) ๊ทธ๊ฑธ๋กœ ๋Œ€์ฒด`ํ•˜๋„๋ก ํ•˜๊ฒŒ ํ•˜์ž.

1. [BruteForce]๋กœ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
 -> ์ „์ฒด๋ฅผ ๋‹ค ๋ณด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, for๋ฌธ์ด ๋‹ค๋Œ๊ณ  ์ถœ๋ ฅํ•ด์•ผํ•จ. -> for๋ฌธ ๋๋‚˜๊ณ  returnํ•˜๋Š” ๋ฐฉ์‹
 -> ์ฐพ๋Š” ์ ์ด ์–ด๋”˜์ง€ ๋ชฐ๋ผ ๋‹ค ๋Œ๋ฉด์„œ ๋งค๋ฒˆ  ํ™•์ธ + ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•œ๋‹ค๋ฉด? for๋ฌธ ์†์—์„œ ์—…๋ฐ์ดํŠธ ํ›„ -> ์ตœ์ข… ์—…๋ฐ์ดํŠธ ๋ณ€์ˆ˜ return(print) -> for๋ฌธ์œ„์— ์ €์žฅํ•  ์ดˆ๊ธฐํ•ญ ๋ณ€์ˆ˜ : flag  or count or update -> for๋ฌธ์œ„ ๋ณ€์ˆ˜ ํ•ด์„ : ์ดˆ๊ธฐํ•ญ์„ ๋„ฃ๋Š” ์ง์ „๊นŒ์ง€์˜ ~ํ•œ ๊ฐ’(๋“ค) -> for๋ฌธ์† ํ•ด์„ : ์ง์ „๊นŒ์ง€์˜ ~ -> ์—…๋ฐ์ดํŠธ -> ํ˜„์žฌ๊นŒ์ง€~ -> for๋ฌธ์ด ๋‹ค ๋๋‚˜๋ฉด? ์ตœ์ข… ~
 -> ์—…๋ฐ์ดํŠธ์‹œ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•œ๋‹ค์น˜๋ฉด, 1์ฐจ์›์ด๋ฉด min(,) -> 2์ฐจ์›์œผ๋กœ์„œ 1๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ํŠœํ”Œ or ๋ฆฌ์ŠคํŠธ๋ฉด, for๋ฌธ๋งˆ๋‹ค min()๋‚ด์žฅํ•จ์ˆ˜์ฒ˜๋Ÿผ ๊ฑฐ๋ฆฌ๊ตฌํ•˜๋Š” ๊ณต์‹์„ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์„œ for๋ฌธ์†์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ -> ๋งŒ์•ฝ, ์ตœ์†Œ๊ฐ’์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” data 2๊ฐœ(์ด์ƒ)๋ฅผ ์›ํ•œ๋‹ค๋ฉด, ๋ฆฌ์ŠคํŠธ์— 0๋ฒˆ 1๋ฒˆ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ ์—…๋ฐ์ดํŠธ์‹œ์ผœ์ค€๋‹ค!(ํŠœํ”Œ์€ ์•ˆ๋ณ€ํ•˜๋ฉฐ, ์—…๋ฐ์ดํŠธ๋˜๋ฉด์„œ ๋ณ€ํ•œ ๊ฒƒ์„ ๋„ฃ์–ด์ค˜์•ผํ•˜๋ฏ€๋กœ ๊ทธ๋‹ค์Œ์ธ list๋ฅผ ์ž๋ฃŒํ˜•์œผ๋กœ ๊ฐ€์ง€๋ฉด์„œ ํ• ๋‹น๋งŒ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์ž.)
 -> ํ’€์ด๊ณผ์ •์—์„œ 1๊ฐœ์˜ iter๋ฅผ ์ค‘๋ณต์—ฌ๋ถ€๋งŒ ๊ฒ€์‚ฌํ•˜๋ฉด ๋œ๋‹ค๋ฉด, dict์˜ key์— T/F๋กœ๋งŒ ํ™•์ธํ•˜๋Š” memoization๊ณ ๋ ค
 -> ์ง์ „๊นŒ์ง€์˜ ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’์€ for i์—์„œ (ํ™œ์šฉํ›„) ์—…๋Žƒํ•ด์ค˜์•ผํ•œ๋‹ค.(return ์ตœ์ข…์—…๋Žƒ๊ฐ’)
 -> ex> min_so_far = default -> for i -> (ํ™œ์šฉ ํ›„) ์—…๋Žƒ  : min_so_far = min( min_so_far, [i]ํ•ญ=๋งˆ์ง€๋ง‰ํ•ญ๊ณผ ๋น„๊ตํ•˜์—ฌ ์—…๋Žƒ ) or ์—…๋Žƒ๋งŒํ•œ ๋’ค, ๋ฐ”๊นฅ์—์„œ return  ์ตœ์ข…์—…๋Žƒ๊ฐ’
 -> list์—์„œ ์ˆœ์„œ๋ฅผ ๊ฐ€์ง„ 2๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ๋Œ์•„์•ผํ•œ๋‹ค๋ฉด! 2์ค‘for๋ฌธ ์ด์™ธ์— -> ๋’ค์—๊ฒƒ์„ ๊ธฐ์ค€(for i ๊ณ ์ •)ํ•ด์•ผ ์•ž์—๊ฒƒ์˜ ์ตœ๋Œ€/์ตœ์†Œ๋ฅผ ๋™์‹œ์—(๊ทธ ๊ณผ์ •์—์„œ) ์ฑ™๊ฒจ๋†“์„ ์ˆ˜ ์žˆ๋‹ค. 
 -> ์ •๋ ฌ๋œlist๋ผ๋ฉด, <<์ด์ง„ํƒ์ƒ‰>>์„ ๋จผ์ € ์ƒ๊ฐํ•˜๊ณ  / ๋‹ค๋ฅธ๋ฐฉ๋ฒ•์œผ๋กœ <<์–‘๋์„ ๋™์‹œ์— ํƒ์ƒ‰>>ํ•˜๋Š”๋ฐ while (index) low < high low+=1 high-=1 ์œผ๋กœ ๋ถ™์ด๋ฉด์„œ ํƒ์ƒ‰ํ•œ๋‹ค.
 --> ์ฆ‰, ์ด์ •๋ฐฐ(์ด๋ฏธ์ •๋ ฌ๋œ๋ฐฐ์—ด)์—์„œ์˜ ํƒ์ƒ‰์€, ์ด์ง„ํƒ์ƒ‰ or < ํˆฌํฌ์ธํ„ฐ ํ™œ์šฉ ํƒ์ƒ‰ > ๋„ ๊ณ ๋ คํ•œ๋‹ค.
 -> for i์—์„œ ์–‘์ชฝ์œผ๋กœ ์ตœ๋Œ€๊ฐ’์€ max( array[:i] or array[i:])์˜ ์Šฌ๋ผ์ด์‹ฑ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋” ํšจ์œจ์ ์ด๋ ค๋ฉด ์‹œ๋ณต(์Šฌ๋ผ์ด์‹ฑ, O(n))->๊ณต๊ฐ„(๋ณ€์ˆ˜)์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฐœ๋…์ด๋‹ค.
 --> i๋ฒˆ์งธ๋งˆ๋‹ค ๋งค๋ฒˆ slicingํ•˜์—ฌ, ์ง์ „๊นŒ์ง€์˜?(X) << i๋ฒˆ์žฌ๊นŒ์ง€ >> ์Œ“์ธ << ์—ฌํƒœ๊นŒ์ง€์˜ >> min or max๊ฐ’์„ ๊ตฌํ•ด์™”์—ˆ๋‹ค.
 ---> ์ง์ „๊นŒ์ง€์˜ -> for๋ฌธ์œ„ ๋ณ€์ˆ˜๋กœ ์—…๋ฐ์ดํŠธํ•ด์„œ ๊ฐ€์ ธ๋‹ค๋‹˜, 
 ---> ๊ฐ i์ž…์žฅ์—์„œ ์ง์ „๊นŒ์ง€์˜ -> for๋ฌธ์œ„ ๋ณ€์ˆ˜๋กœ ์—…๋ฐ์ดํŠธํ• ๋•Œ๋งˆ๋‹ค, ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง„ ๋ฐฐ์—ด์— ๊ธฐ๋ก(์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ฐ i์ƒํƒœ(์ž…์žฅ)์—์„œ <์—ฌํƒœ๊นŒ์ง€์˜>์˜ minmax๋“ฑ ๊ฐ’์„ ์ €์žฅํ•ด์•ผํ•จ.)
 --> for๋ฌธ์œ„๋ณ€์ˆ˜ + update๋ฅผ ์ด์šฉํ•˜๋ฉด, ๋งค๋ฒˆ ์ง์ „๊นŒ์ง€์˜ + ํ˜„์žฌ๊นŒ์ง€์˜ min,max ๋“ฑ์˜ ๊ฐ’์„ updateํ•  ์ˆ˜ ์žˆ๋‹ค. update๊ฐ’์„ ์Ÿ์—ฌ๋†“์„ ์ •ํ•ด์ง„๊ธธ์ด์˜ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๋ฉด, ๊ทธ update๋˜๋Š” ๋‹น์‹œ์˜ min, max๊ฐ’์„ ์ €์žฅํ•ด๋†“์„ ์ˆ˜ ์žˆ๋‹ค. ๋‹น์‹œ์˜ min,max๋“ค์„ ์ €์žฅํ•ด๋†“์œผ๋ฉด, ๋งค๋ฒˆ ์Šฌ๋ผ์ด์‹ฑํ•œ max(list[:i]) ๋“ฑ์˜ ์ง์ „๊นŒ์ง€์ค‘ ์ตœ๋Œ€๊ฐ’์„ slicing์—†์ด ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
 ---> ๋ณธ ๋ฌธ์ œ์—์„œ์˜ ๊ฐ i๊ฐ€ ๊ฐ–๋‹ค ์“ธ ์ˆ˜ ์žˆ๊ฒŒ, <๊ฐi์ž…์žฅ์—์„œ ์ง์ „๊นŒ์ง€์˜ max>๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋†“๋Š”๋‹ค.
    * ๊ฐ i๋ฒˆ์งธ๋งˆ๋‹ค left_max, right_max๋ฅผ ์ €์žฅํ•   [default ๊ฐ’(0) ]* n ์˜ ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ 2๊ฐœ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋†“๊ณ (์™ผ์ชฝ์šฉ, ์˜ค๋ฅธ์ชฝ์šฉ) ๊ฐ i๋ฒˆ์งธ๋งˆ๋‹ค 0์ œ์™ธ 1~(i-1)๊นŒ์ง€์—์„œ์˜ ์ตœ๋Œ€๊ฐ’๋“ค ์—…๋ฐ์ดํŠธ / n์ œ์™ธ(i+1)~(n-1) ์ค‘ ์ตœ๋Œ€๊ฐ’ ์—…๋ฐ์ดํŠธ list๋ฅผ ๊ฐ๊ฐ 2๊ฐœ๋ฅผ ์ฑ„์›Œ์„œ ๋ฏธ๋ฆฌ ๊ตฌํ•ด๋†“๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. <-์ƒ๊ฐํ•˜๊ธฐ ์–ด๋ ค์›€.
    * max(list[:i]) replace : i์—์„œ 1~(i-1)๊นŒ์ง€ ์ค‘ ์ตœ๋Œ€ ๊ฑด๋ฌผ ๋†’์ด ->
      for๊ฐ€ ๋Œ๊ณ  ์žˆ์œผ๋‹ˆ, for๋ฌธ ์œ„ ๋ณ€์ˆ˜(์‹œ์ž‘ํ•ญ๋Œ€์ž…[0], ์ง์ „(i-1)๊นŒ์ง€)์˜ ์ตœ๋Œ€ ๊ฑด๋ฌผ๋†’์ด ์ €์žฅ -> ํ˜„์žฌํ•ญ(i) ๋น„๊ต์—†์ด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ
    * max(right [:i]) replace : ๋ฌธ์ œ๋Š” (i+1)~(n-1)๊นŒ์ง€ ์ค‘ ์ตœ๋Œ€ ๊ฑด๋ฌผ ๋†’์ด ->
      for๋ฌธ์œ„๋ณ€์ˆ˜(์‹œ์ž‘ํ•ญ๋Œ€์ž…[-1], ์ง์ „๊นŒ์ง€์˜ค๋ฉด์„œ) + for range(n-2,,-1)์„ ํ™œ์šฉํ•ด์„œ ๋(n-2)๋ถ€ํ„ฐ ->n-3->...-> ์‹œ์ž‘(-1)๊นŒ์ง€ ์˜ค๋ฉด์„œ ์ง์ „ํ•ญ์ด i+1๋กœ ์ƒ๊ฐํ•˜๋ฉด์„œ ์ตœ๋Œ€๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ํ•ด๋‚˜๊ฐ„๋‹ค.
 -> max(์ƒ์ˆ˜,) or min(์ƒ์ˆ˜,)๋กœ ์ตœ์†Œ๊ฐ’์„ ์ง€์ •ํ•œ max๊ฐ’(๋ˆ„์ ํ•ฉ์‹œ ์ตœ์†Œ๊ฐ’ 0) / ์ตœ๋Œ€๊ฐ’์„ ์ง€์ •ํ•œ ์ตœ์†Œ๊ฐ’์„ ํ™œ์šฉํ•œ๋‹ค. ex> max(0, ์Œ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ์ง€๋„ ๋ชจ๋ฅด๋Š” ๊ณ„์‚ฐ) ๊ฐ’์„ ๋ˆ„์ ํ•ฉ์— ๋”ํ•ด์ค˜์•ผํ•  ๊ฒฝ์šฐ.
 -> ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋Š”? - ๋ฌดํ•œ๋ฃจํ”„๋กœ 1(์ดˆ๊ธฐํ•ญ)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉฐ, +1์”ฉ ๋‚˜๊ฐ€๋ฉด์„œ, ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ ๋ฐ”๋กœ return(break)ํ•ด๋ฒ„๋ฆฌ๋ฉด `๊ฐ€์žฅ ์ž‘์€ ์ˆ˜`๋‹ค.
 --> ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋‘(n)๋ฒˆ์งธ ์ˆ˜๋Š”? ์ž‘์€์ˆ˜๋ถ€ํ„ฐ ์ถœ๋ฐœ -> [count๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€]ํ•˜์—ฌ, ์กฐ๊ฑด ๋งŒ์กฑํ• ๋•Œ๋งˆ๋‹ค +1ํ•˜๋ฉด์„œ, ํ•ด๋‹น n์—์„œ return(break)ํ•œ๋‹ค.
 -> for๋ฌธ์„ ๋Œ๋ฉด์„œ curr(ํ˜„์žฌ๊นŒ์ง€ -> for๋ฌธ์•ˆ์—์„œ ์ง์ „๊นŒ์ง€)๋ฅผ updateํ•ด์ค„ ๋•Œ, ๊ทธ max ์ƒํ™ฉ์—์„œ์˜ (์ˆœ์„œ๋ชจ๋ฅด๊ณ  value๋งŒ ์ฑ™๊ธฐ๊ธฐ ๊ฐ€ ์•„๋‹Œ) index ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋‹ค ์ฑ™๊ธฐ๋ ค๋ฉด, curr(ํ˜„์žฌ๊นŒ์ง€์˜) = max( curr(์ง์ „๊นŒ์ง€์˜), i๋ฒˆ์งธ๊ฐ’)๊ฐ€ ์•„๋‹ˆ๋ผ [if๋ฌธ์œผ๋กœ ๋น„๊ต + ๊ฐ’ ์—…๋ฐ์ดํŠธ + index๋ณ€์ˆ˜ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฑ™๊ธฐ๊ธฐ] ๋“ฑ ๋ณ€์ˆ˜์ถ”๊ฐ€ + if๋ฌธ์œผ๋กœ ๊ต์ฒดํ•˜์—ฌ ํ’€์–ด์„œ ํ•ด๊ฒฐํ•ด์•ผํ•œ๋‹ค.

2. input์— ๋Œ€ํ•œ [๋ถ€๋ถ„ ๋ฌธ์ œ]๊ฐ€ ์žˆ๋Š”์ง€ [Divide anc conquer]๋กœ ์‚ดํŽด๋ณธ๋‹ค 
 -> [input์„ Divide and Conquer์˜ ์žฌ๊ท€]๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. **์‹์„ ์งค ๋•, ํ•จ์ˆ˜(n-1)์„ ํ’€์—ˆ๋‹ค๊ณ  ๊ฐ€์ •**ํ•˜๊ณ  ๋ถ€๋ถ„๋ฌธ์ œ๋“ค์„ conquerํ•œ๋‹ค.
 -> ๋ถ€๋ถ„ ๋ฌธ์ œ๋Š”  input ๋งˆ์ง€๋ง‰ ๊ฒฝ์šฐ = ์กฐ๊ฑด๋ณ„ ๋ถ€๋ถ„1 + ๋ถ€๋ถ„2 or max(๋ถ€๋ถ„1, ๋ถ€๋ถ„2) ๋“ฑ์œผ๋กœ **๋ฐฐ๋ฐ˜**์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ํ’€์–ด์ง„๋‹ค๋ฉด ์ตœ์ ์˜ ๋ถ€๋ถ„๋ฌธ์ œ๋‹ค.(๋ถ€๋ถ„๋ฌธ์ œ์˜ ์กฐํ•ฉ = ์›๋ž˜๋ฌธ์ œ ๋‹ต)
 -> input n์„ `n-1, n-2`์˜ ์กฐํ•ฉ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ `n//2`์˜ mid ํ™œ์šฉ,  `n๋ฏธํฌํ•จ n-1๋ถ€๋ถ„๋ฌธ์ œ + nํ•ญํฌํ•จ n-1๋ณ€ํ˜•๋ฌธ์ œ`์˜ ์ •๋‹ต๊ฐ€์ •+ n-1๋ถ€๋ถ„๋ฌธ์ œํ™œ์šฉnํฌํ•จ๋ฌธ์ œํ•ด๊ฒฐ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•œ๋‹ค.
 -> ์žฌ๊ท€ : base case ๊ฐ€์žฅ ๋จผ์ € + (divide) + recursive by ๊ฐ€์ •+๋ถ€๋ถ„ ๋ฌธ์ œ์กฐํ•ฉ
 -> value์˜ ์ค‘๋ณต๊ฒ€์‚ฌ๋Š” ifํ•ด๋‹น๋ฒ”์œ„<= and <= count+= ํ•œ ๋’ค, ๋ฒ”์œ„๊ตฌ๊ฐ„ = ๊ฐฏ์ˆ˜์‹œ ์ค‘๋ณตX , ์ด์ง„ํƒ์ƒ‰์œผ๋กœ ์ค„์—ฌ๋‚˜๊ฐ„๋‹ค.
 -> ๋ถ€๋ถ„๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ์‹œ ํƒ์ƒ‰๋ฒ”์œ„๊ฐ€ ๋๋งŒ ์กฐ์ •๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์•ž๋’ค๊ฐ€ ์กฐ์ •๋˜๋Š” ๊ฒฝ์šฐ, start, end ๋‘˜๋‹ค ๋ฐ›๋Š”๋‹ค.

3. [์ตœ์ ์˜ ๋ถ€๋ถ„๋ฌธ์ œ]๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฐ๋ฐ˜์˜ [๋ถ€๋ถ„๋ฌธ์ œ๋“ค์ด ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ์ค‘๋ณต]๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. -> Dynamic(Memo or Tabul or Tabul๊ณต๊ฐ„์ตœ์ ํ™”)
 -> n-1 + n-2๋“ฑ์œผ๋กœ ํ’€๋ฆฌ๋Š” ๋ถ€๋ถ„๋ฌธ์ œ์˜ ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์ค‘๋ณต๋œ๋‹ค. ์ฐธ๊ณ ๋กœ n//2 ์˜ midํ™œ์šฉ, merge_sort ๋“ฑ์—์„œ input์˜ ๊ธธ์ด๋กœ ๋ถ€๋ถ„๋ฌธ์ œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ค‘๋ณต์ด ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค.
 --> n-1, n-2๋“ฑ์˜ ์ด˜์ด˜ํ•œ, ๋‹ค ์•Œ์•„์•ผํ•˜๋Š” ๊ฒƒ์€ tabulation -> ๊ณต๊ฐ„์ตœ์ ํ™”
 --> tabulation: 1) n๊ณผ index๋ฅผ ์ผ์น˜์‹œํ‚จ table(list)์— ์ดˆ๊ธฐํ•ญ์„ ๋„ฃ์–ด๋‘”๋‹ค. 2) for๋ฌธ 1๊ฐœ๋กœ  ์ดˆ๊ธฐํ•ญ์ดํ›„~n๊นŒ์ง€ ๋Œ๋ฉด์„œ  ๋ถ€๋ถ„๋ฌธ์ œ๋“ค & append๋กœ n๋ฒˆ์งธ index์˜ table์„ ์ฑ„์šด๋‹ค. 3) table[n]์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค
 --> tabulation์˜ ๋ฌธ์ œ๋“ค(์ตœ์†Œ๋™์ „๊ฑฐ์Šฌ, ๊ณ„๋‹จ์˜ฌ๋ผ๊ฐ€๊ธฐ)๋Š” (N๋ฒˆ์งธ, [๋‹จ์œ„๋ฆฌ์ŠคํŠธ])์˜ 2๊ฐ€์ง€ ์ธ์ž๋ฅผ ๋ฐ›๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
 ----> tabul์‹œ, ๋ถ€๋ถ„๋ฌธ์ œ์˜ ๊ฐฏ์ˆ˜(3๊ฐœ) > ์•Œ ์ˆ˜ ์žˆ๋Š” ์ดˆ๊ธฐํ•ญ(2๊ฐœ) ๋ผ๋ฉด? ์ดˆ๋ฐ˜ ๋ฌธ์ œ ํ’€์–ด๋‚˜๊ฐˆ ๋•Œ n-3 ์ •๋„์—์„œ ์Œ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค. -> table[์Œ์ˆ˜index]๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด tabul2) ๋ถ€๋ถ„๋ฌธ์ œ๋กœ append์ „์— table[n]=0์ดˆ๊ธฐํ™” ์ดํ›„, if ํ•„ํ„ฐ๋งํ•ด์„œ +=๋กœ ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
 my) appendํ•  ๋•Œ ํ•„ํ„ฐ๋ง์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, table.append(0)๋“ฑ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด๋†“๊ณ  ifํ•„ํ„ฐ๋ง: +=๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
 ---> table ---> ๊ณต๊ฐ„ optimized: 1) ์žฌ๊ท€์‹์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„๋ฌธ์ œ์˜ ๊ฐฏ์ˆ˜๋งŒํผ ๋ณ€์ˆ˜๋ฅผ for๋ฌธ์—์„œ ์ƒ์„ฑ ๋ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•˜๋ฏ€๋กœ, ์ดˆ๊ธฐํ•ญ ๋ณ€์ˆ˜๋„ ๊ทธ๋งŒํผ ๋‘”๋‹ค.(n-1๋„, n-2๋„ ๋‹ค <๋‹ค์Œํ•ญ์œผ๋กœ update> ๋˜์–ด์•ผํ•จ.) ์ฃผ๋กœ, prev[func(n-2)], curr[func(n-1)]ํ˜•์‹์ด๋ฉฐ, ๊ทธ ์ค‘ curr(๋’ค์ชฝ)๊ฐ’์ด ๋ฐ˜๋ณต๋ฌธ์„ ๋‹ค ๋Œ๊ณ  returnํ•  n๋ฒˆ์งธํ•ญ์ด ๋œ๋‹ค.  2) table์ฒ˜๋Ÿผ for๋กœ n์„ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ์€ ๋˜‘๊ฐ™์œผ๋‚˜, ์ดˆ๊ธฐํ•ญ์„๋ณด๊ณ  curr๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ๋‹ค ๋‚˜์™”์„ ์‹œ n์ด ๋˜๋ก ์ „์ง„(for๋ฌธ์œ„๋ณ€์ˆ˜ update)ํšŸ์ˆ˜๋ฅผ ๋ฏผ๊ฐํ•˜๊ฒŒ ์ž˜ ํŒ๋‹จํ•œ๋‹ค. 3) ๋ฐ˜๋ณต๋ฌธ๋™์•ˆ n์œผ๋กœ update๋œ curr๋ณ€์ˆ˜๋ฅผ returnํ•œ๋‹ค.
 ----> ๊ณต๊ฐ„optimized์˜ ๊ธฐ์ค€์ด ๋ณ€์ˆ˜a,b์ค‘ a(prev)๋‹ค? == [n=1์ผ ๋•Œ a์— ๋งž์ถฐ์ง„๋‹ค] -> a๊ฐ€ input n์˜ ๊ธฐ์ค€์ด๋ฏ€๋กœ return a
 
 --> n//2, k์™€ n-k์˜ ๋ถ€๋ถ„๋ฌธ์ œ -> cache๋ฅผ ์“ฐ๋Š” memoization
 -> tabulation(๋ถ€๋ถ„๋ฌธ์ œ๋ฅผ list[k-1], list[k-2]๋กœ ํ’ˆ)์œผ๋กœ ํ’€๊ฑฐ๋ฉด, base case๋ฅผ list์˜ 0, 1์— ๋ฏธ๋ฆฌ ์ฑ„์›Œ๋†“๊ณ , n๋‹จ๊ณ„์—์„œ ๋ฝ‘์•„์„œ ๋ถ€๋ถ„ํ•ด๊ฒฐํ•œ ์ƒํƒœ๋กœ ๊ฐ€์ •ํ•ด์„œ conquerํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋ฌธ์ œ๋Š”.. n๋ฒˆ์งธ ๊ตฌํ• ๋–„.. ์ฒจ๋ถ€ํ„ฐ n๊นŒ์ง€ ์ฑ„์›Œ์•ผํ•จ -> ๊ณต๊ฐ„ ์ตœ์ ํ™”ํ•ด์•ผํ•จ. -> ์ดˆ๊ธฐํ•ญ ํ™•์ธํ›„, ๋ช‡๋ฒˆ๋ฐ˜๋ณตํ•ด์•ผํ• ์ง€ ์ดˆ๊ธฐํ•ญ~nํ•ญ์œผ๋กœ ํŒ๋‹จ.
 -> memoization(๋ถ€๋ถ„๋ฌธ์ œ๊ฐ€ ์—†์Œ)์€ ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ cache(dict)๋ฅผ ์ธ์ž๋กœ ๋ฐ›์œผ๋ฉฐ, recursive case์—์„œ๋Š” cache์— ์žˆ๋Š”๊ฒฝ์šฐ๋ถ€ํ„ฐ ๋จผ์ € ํ™•์ธํ•˜์—ฌ ์žˆ์œผ๋ฉด returnํ•˜๊ณ  ๋‹น์‹œ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ์‹œ์ผœ์•ผํ•จ. ์—†๋Š”๊ฒฝ์šฐ ๋‚˜๋ˆ ์„œ ๊ณ„์‚ฐํ•œ๋‹ค. default๊ฐ’ ์—†์ด ์‹œ์ž‘ + for  if key์—์žˆ์œผ๋ฉด return ์—†์œผ๋ฉด =True ๋„ฃ๊ธฐ. if์—์„œ ํ•ด๊ฒฐ๋กœ์ง์ด ์™„์„ฑ๋˜์—ˆ๋‹ค. 
 --> base์—์„œ๋„ cache์‚ฌ์šฉ, recursive์—์„œ ๋‚˜๋ˆ„๊ธฐ์ „์— cacheํ™•์ธ, ์—†์œผ๋ฉด ๋ถ€๋ถ„๋ฌธ์ œ ํ•ด๊ฒฐํ›„, cache์ €์žฅํ›„ ์ข…๋ฃŒ.
 -> ์ž๋ฃŒํ˜•์˜ indexํƒ์ƒ‰์ด ์•„๋‹Œ, value๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ๋„, start,end์˜ ์ธ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํŠนํžˆ ์ด์ง„ํƒ์ƒ‰์˜ midํ™œ์šฉ์‹œ ๋ถ€๋ถ„๋ฌธ์ œconquer์‹œ ํ™œ์šฉ์„ ์œ„ํ•ด ์›๋ž˜ํ•จ์ˆ˜์— ์ธ์ž๋กœ ์กด์žฌํ•ด์•ผํ•จ. 
    - <valueํƒ์ƒ‰>์€ ์ด์ง„์˜ ์ ˆ๋ฐ˜ ํƒ์ƒ‰์ด๋ผ๋„... index๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ  <๋ชจ๋“  ์š”์†Œ๋ฅผ ๋Œ๋ฉด์„œ> if ๋ฒ”์œ„๋กœ ํŒ๋‹จํ•œ๋‹ค. ex> count=0 <๋ชจ๋“  ์š”์†Œ for๋Œ๋ฉด์„œ> if์ ˆ๋ฐ˜๋ฒ”์œ„ count+=1
    - ๋˜ํ•œ, <valueํƒ์ƒ‰>์€ list๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ , value์˜ ๋ฒ”์œ„๋งŒ ๋ฐ”๋€์ฒด ํƒ์ƒ‰์„ ์ด์–ด๋‚˜๊ฐ„๋‹ค. ex> ์ค‘๋ณต๊ฒ€์‚ฌ ์ž์ฒด๋ฅผ list์ „์ฒด๋Œ๊ธฐ + value๋งŒ์˜ ๋ฒ”์œ„๋งŒ ๋ฐ”๊ฟ”์„œ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 
 -> ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ํ‘ธ๋Š” ๋ถ€๋ถ„๋ฌธ์ œ๋Š” if ๋ฐœ๊ฒฌ์‹œ start==end๋ ๋•Œ๊นŒ์ง€ ๋Œ๋ ค์•ผํ•˜๋‹ˆ ์ค„์–ด๋“  ์ ˆ๋ฐ˜๋ฒ”์œ„๋กœ ์ฐพ๋„๋ก return ์ค‘๋ณต์ฐพ์€์ชฝ์˜ ๋ถ€๋ถ„๋ฌธ์ œ else return ์ค‘๋ณต๋ชป์ฐพ์€์ชฝ์˜ ๋ถ€๋ถ„๋ฌธ์ œ
 --> ์ด์ง„ํƒ์ƒ‰์€, ๊ฒฐ๊ตญ start == end๋กœ 1๊ฐœ ๊ฐ’์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€, 2๊ฐœ ๋ฒ”์œ„(index๋ฅผ ์ ˆ๋ฐ˜ or value๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜) ์ค‘ ์ฐพ์€ ๋ฒ”์œ„์—์„œ ๋‹ค์‹œ ๋ถ€๋ถ„๋ฌธ์ œ๋ฅผ ๊ณ„์† ๋Œ๋ฆฌ๋Š” ๊ตฌ์กฐ๋‹ค.

4. ์กฐ๊ฑด๋ณ„ ๋ถ€๋ถ„1 + 2 + 3์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ ์ค‘ ๋ฐฐ๋ฐ˜๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ [์ตœ๋Œ€/์ตœ์†Œ ๋“ฑ ํŠน์ •์กฐ๊ฑด 1๊ฐœ ์„ ํƒ]์ด ๋‹ต์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ์กฐ๊ฑด ์ค‘์— ์ตœ๋Œ€๊ฐ’์„ ์„ ํƒ + ๊ทธ๋•Œ์˜ ๋ถ€๋ถ„๋ฌธ์ œ๊ฐ€ ์›๋ž˜ ๋ฌธ์ œ์˜ ๋‹ต์ธ์ง€ [Greedy algorithm]์„ ํŒ๋‹จํ•ด์„œ ํ‘ผ๋‹ค.
 -> greedy๋Š” ๋ถ€๋ถ„๋ฌธ์ œ(์ง์ „ํ•ญ์˜ ์ •๋‹ต์ด์šฉ)์™€์˜ ๊ทœ์น™(ํƒ1์˜ ๊ทœ์น™)์ด ๋ฐœ๊ฒฌ๋˜๋ฉด, for๋กœ <<์ฒจ๋ถ€ํ„ฐ 1๋ฒˆ์— ๋‹ค>> ๋Œ๋ฉด์„œ ํ˜„์žฌ๊นŒ์ง€ max๊ฐ’์„ updateํ•˜๋„๋ก ์„ค๊ณ„๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทœ์น™๋งŒ ๋ฐœ๊ฒฌ๋˜๋ฉด ๋ถ€๋ถ„๋ฌธ์ œ๋Š” ์•„์˜ˆ ํ•จ์ˆ˜๋‚ด์—์„œ ์‚ฌ๋ผ์ง.
 --> forfor(BF, n**2), for+n//2(DC, nlgn) ๋“ฑ์—์„œ ---> ํƒ1์˜ ๊ทœ์น™๋งŒ ๋ฐœ๊ฒฌ๋˜๋ฉด for๋ฌธ1๊ฐœ๋กœ max update(Greedy, n)์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ํฌ๊ฒŒ ์ค„์–ด๋“ ๋‹ค.
 --> greedy ๋“ฑ [์ง์ „ํ•ญ๊ณผ์˜ ๊ทœ์น™ ๋ฐœ๊ฒฌ]์‹œ, <<์ง์ „๊นŒ์ง€์˜ ์ •๋‹ต>>๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, <<์ง์ „๊นŒ์ง€์˜ ๊ณ„์‚ฐ>>๋„ ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„๋†“๊ณ  update์‹œ์ผœ ํ™œ์šฉ๊ฐ€๋Šฅํ•จ. <<ํ˜„์žฌ์˜ ์ •๋‹ต >> by <<ํ˜„์žฌ์˜ ๊ณ„์‚ฐ>>์„ ์™„์„ฑํ•˜์ž.
 --> greedy๋Š” ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง€๋Š” ๊ฒƒ์ด memo๋‚˜ tabul๊ณผ ๋น„์Šทํ•˜๊ฒŒ (N,[๋‹จ์œ„๋ฆฌ์ŠคํŠธ])ํ˜•ํƒœ์ง€๋งŒ, N์ด ๋ฒ”์ฃผํ˜•(N๋ฒˆ์งธ ๋“ฑ)๊ฐ€ ์•„๋‹ˆ๋ผ ์ˆซ์žํ˜•(value)์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, (value, [๋‹จ์œ„๋ฆฌ์ŠคํŠธ])๊ฐ€ ๋ถ€๋ถ„๋ฌธ์ œ๋กœ ์•ˆ๋‚˜๋ˆ ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋• ํƒ์š•์  ์†์„ฑ์ด ํ’€๋ฆฌ๋„๋ก updateํ•ด์„œ ํ’€์–ด๋ฒ„๋ฆฐ๋‹ค. update๊ณผ์ •์—์„œ value๊ฐ€ unit_list(์—ญ์ˆœ์ •๋ ฌ, greedy)์— ์˜ํ•ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ชผ๊ฐœ์ง„๋‹ค.
 -> - greedy๋Š” ์žฌ๊ท€์˜ base/recursive๋Š” ์‚ฌ๋ผ์ง€๊ณ  sorted( , reverse=True) or max(๋ถ€๋ถ„1, ๋ถ€๋ถ„2)๋กœ  ๋ถ€๋ถ„๋ฌธ์ œ ์กฐ๊ฑด์ตœ๋Œ€ ํƒ1์˜ ์ผ๋ฐ˜ ๋ฌธ์ œ๋‹ค. ์ง์ „๊นŒ์ง€์˜๋ณ€์ˆ˜+for+ํ˜„์žฌํ•ญ์œผ๋กœ๋ณ€์ˆ˜์—†๋Žƒ์œผ๋กœ ์ฒจ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ•ด๊ฒฐํ•œ๋‹ค.
 -> ์ง์ „์ด ์žˆ์–ด์•ผํ•˜๋ฏ€๋กœ, ๊ฐ’์— [0]๊ฐ’์„ ๋„ฃ๊ณ  ์‹œ์ž‘์€ range(1,)๋ถ€ํ„ฐ ํ•˜๋Š” sense


6. ๊ธฐํƒ€ ๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ
 -> ์†Œ์ˆ˜ํŒ๋‹จ(isPrime2)์€ <์•ฝ์ˆ˜๋Š” ์ง์„ ์ด๋ฃจ๋‹ˆ ์ ˆ๋ฐ˜๋งŒ ํƒ์ƒ‰>์œผ๋กœ ์‹œ๊ฐ„์„ ์ค„์ด๊ฑฐ๋‚˜
 -> 2~n๊นŒ์ง€์˜ ์†Œ์ˆ˜ ์นด์šดํŒ…(์ฐพ๊ธฐ) (countPrimes, findPrimes)๋Š”  <๋งค๋ฒˆ isPrime2๋กœ ์ฐพ์ง€๋ง๊ณ , ์ƒˆ๋กœ์šด tabulation๋ฐฉ์‹ + ์ดˆ๊ธฐํ•ญ์€ ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์„ ์ฃผ๊ณ ์„œ ์ด์šฉํ•˜์—ฌ ํƒ์ƒ‰๋ฒ”์œ„๋ฅผ ํŒํŒ ์ค„์ž„(while๋“ฑ์žฅ) >๋กœ ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜
 -> ์†Œ์ธ์ˆ˜๋ถ„ํ•ด(factorize2)๋Š” ์†Œ์ธ์ˆ˜ ํ›„๋ณด๋“ค(2~n-1)์„ ํ•˜๋‚˜ ํ•˜๋‚˜ ๋‹ค๋ฝ‘์•„์„œ ๋Œ๋ ค์„œ ํ™•์ธํ•˜์ง€๋ง๊ณ , < ์ดˆ๊ธฐํ•ญ 2๋ถ€ํ„ฐ +1์”ฉ ํ™•์ธํ•ด๋‚˜๊ฐ€๋ฉด์„œ i์˜ ํƒ์ƒ‰๋ฒ”์œ„๋ฅผ ๋ฃจํŠธ(n)์œผ๋กœ ํƒ์ƒ‰๋ฒ”์œ„๋ฅผ ์ค„์—ฌ์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜๊ฐ€๋Š” ๊ฒƒ>์ด ๋” ๋น ๋ฅด๋‹ค.  n์„ //i๋กœ ์ค„์—ฌ๋‚˜๊ฐ€๋‹ˆ sieve์ฒ˜๋Ÿผ ๋ฐฐ์ˆ˜๋ฅผ ์ œ๋ผ๋Š” ๊ฒƒ์€ factorize1๊ณผ๋Š” ๋™์ผํ•˜๋‹ค. ์š”์•ฝ = ์†Œ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํ•ด๋†“๊ณ  ๋„๋Š” ์‹œ๊ฐ„ >>> +1์”ฉ ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ ํƒ์ƒ‰๋ฒ”์œ„๋ฅผ ์ขํžˆ๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅด๋‹ค. + ์ฃผ์˜์‚ฌํ•ญ์œผ๋กœ ๋งจ ๋งˆ์ง€๋ง‰ n์ด 1์ด ์•„๋‹ˆ๋ฉด (= ๋‹ค์Œ i ~ ๋ฃจํŠธ(n)๊นŒ์ง€๋„ ์•ˆ๋‚˜๋ˆ„์–ด์ง€๋ฉด, ๊ทธ๋ƒฅ ๊ทธ๊ฒƒ์„ ์†Œ์ˆ˜๋กœ ํŒ๋‹จํ•˜๊ณ  factors์— ์ถ”๊ฐ€ํ•จ.)
 -> if๋ฌธ์„ ์ผ๋Š”๋ฐ, ์žฌ๊ท€์ฒ˜๋Ÿผ ๋ฐ˜๋ณต๋œ๋‹ค๋ฉด -> while [if์žฌ๊ท€๋ฌธ]์„ ์˜ฌ๋ฆฌ๊ณ  -> ํ•ด์„ : [๊ณ„์† ~ ํ• ๋•Œ๊นŒ์ง€] ์ž‘์„ฑํ•˜๊ณ  / ๊ทธ [๋”์ด์ƒ ~ ์•Š๋Š”๋‹ค๋ฉด, ~๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด] ์œผ๋กœ ํ•ด์„ํ•˜๋ฉด์„œ while๋ฌธ ๋๋‚œ ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค์˜จ๋‹ค.
   - ์ด ๋•Œ, if ๋ฌธ์•ˆ์—์„œ `ํ•œ factor์— ๋Œ€ํ•ด n์ด ์ค„๋ฉด์„œ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ณผ์ •`์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๋“ฏ ์‹ถ๋‹ค. ์ค„๋ฉด์„œ ์—…๋ฐ์ดํŠธ๋˜๋Š” n = ์žฌ๊ท€, ๋ถ€๋ถ„๋ฌธ์ œ์™€ ์ƒ๊ด€๋˜๋Š”๋ฐ, while๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
 -> `not in ๋ชจ์œผ๋Š” ๊ณณ`์„ ํ†ตํ•ด **์—†์œผ๋ฉด ๋„ฃ์–ด๋ผ(append)**๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ. ์‚ฌ์‹ค์ƒ `์ค‘๋ณต ์ œ๊ฑฐ ๋ชจ์œผ๊ธฐ`๋ผ๋ฉด set์„ ์จ๋„ ๋˜์ง€๋งŒ...
 -> ์ง์ „๊นŒ์ง€ ์—…๋ฐ์ดํŠธ ๋ณ€์ˆ˜ or ๋ˆ„์ ํ•ฉ, ๋ˆ„์ ๊ณฑ์ฒ˜๋Ÿผ ๋ˆ„์ lcm๋„ [for๋ฌธ ์œ„ updated๋  ๋ณ€์ˆ˜ or ๋ˆ„์ ๋ณ€์ˆ˜ = ์ง์ „๊นŒ์ง€์˜ lcm  + for + ํ˜„์žฌlcm์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ›„ ๋ˆ„์  ]์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
 -> ๋‘ list์—์„œ ๊ณตํ†ต์ธ ๊ฒƒ์€ 1๋ฒˆ๋งŒ ์ฑ™๊ฒจ์•ผํ•  ๊ฒฝ์šฐ, if ๊ฐ™์œผ๋ฉด ์ฑ™๊ธด๋‹ค+๋‘˜๋‹ค index์ฆ๊ฐ€ elif ๋‹ค๋ฅธ๋ฐ, i๊ฐ€ ์ž‘์€๊ฒฝ์šฐ -> ์ž‘์€๊ฒฝ์šฐ๋ฅผ ์ฑ™๊ธฐ๊ณ  ํ‚ค์›Œ์ค€๋‹ค. ํ‚ค์› ์„ ๋•Œ ๊ฐ™์•„์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ.! ๊ฐ™์•„์ง„๋‹ค๋ฉด ๋˜ ํ•œ๋ฒˆ๋งŒ ์ฑ™๊ฒจ์•ผํ•œ๋‹ค! -> else ๋‹ค๋ฅธ๋ฐ, j๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ-> ์ž‘์€์ชฝ์ด 100% ํ™€๋กœ๋‚จ๊ฒจ์ง€๋Š” ๋†ˆ์ด๋‹ˆ ์ด๋†ˆ์„ ์ฑ™๊ธฐ๊ณ  ํ‚ค์›Œ์ค€๋‹ค.
 


๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ ๋ชฉ์ 

  • cf) ๊ธฐ์—… interview: ๋น„์Šทํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณธ ์  ์žˆ๋‚˜์š”??์˜ ์งˆ๋ฌธ์„ ๋ฐ›์€ ๋’ค, ๋Œ€๊ธฐ์—… ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ˆ˜์ค€๊นŒ์ง€ ์—ญ๋Ÿ‰์„ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ ๊ธฐ๋ก์„ ์ •๋ฆฌํ•จ.

    • 21.09.08 : 03_silver_1316_๊ทธ๋ฃน๋‹จ์–ด์ฒด์ปค(interview)(sorted์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜_find_์—ฐ์†๋œ๋‹จ์–ด)์—์„œ string.find๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠ€๋Š” index๋ฅผ ์ฐพ๋Š” ๊ฒฝ์šฐ?
    • 21.09.22 : doublylinkedlist์˜ repr ์ž‘์„ฑ์‹œ "->" ์ฑ™๊ธฐ๋Š” ๋กœ์ง(๋‹จ)๋‹ค์Œ๊ฒƒ, ์–‘) ๋‹ค๋‹ค์Œ ๊ฒƒ์ด ์žˆ์„๋•Œ s+="->" )๋กœ ํ™”์‚ดํ‘œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ cf) ๋‚˜๋Š” ๊ทธ๋ƒฅ '->'.join()์œผ๋กœ ์‚ฌ์ด์‚ฌ์ด๋งˆ๋‹ค ์—ฐ๊ฒฐํ•จ.
    • 21.10.07 : stack๋ฌธ์ œ) ๊ฐ€์žฅ ํฐ ์ˆ˜ - ์›๋ณธ์ˆœ์„œ๊ธฐ์–ตํ•˜๋ฉด์„œ ๋„ฃ๋˜, ์ง์ „or์ตœ๊ทผ๊ฐ’๊ณผ ๋น„๊ต(LIFO)ํ•ด์„œ ๋‚˜๋ณด๋‹ค ์ž‘์œผ๋ฉด pop์œผ๋กœ ๋‚ ๋ฆฌ๊ธฐ. popํšŸ์ˆ˜ ์ œํ•œ. -> ์ˆœ์„œ๋Œ€๋กœ ๋จน๋Š” ์•ฝ์„ ์•ž์—๊ฒƒ๊ณผ ์ค‘๋ณต๋˜๋ฉดpop์œผ๋กœ ๋‚ ๋ฆฌ๋ฉด์„œ ์ˆœ์„œ๋Œ€๋กœ uniqueํ•˜๊ฒŒ ๊ธฐ์–ตํ•˜๋ฉด์„œ pushํ•˜๊ธฐ.
  • ์ž‘์—…ํ™˜๊ฒฝ : wsl2, vscode image-20210924073210862

Big-O of n ์•Œ๊ณ ๋ฆฌ์ฆ˜ (๋‚˜์˜ฌ๋•Œ๋งˆ๋‹ค ๊ธฐ๋กํ•ด๋‘๊ธฐ)

  • ์ด์ง„ํƒ์ƒ‰ : log(n)

    • n์˜ start or end๊ฐ€ ์ ˆ๋ฐ˜์”ฉ ์ค„๊ฑฐ๋‚˜ or ๋ฐ˜๋ณต๋ฌธ์˜ index i *= 2 2๋ฐฐ๋กœ ์ปค์ง€๊ฑฐ๋‚˜ or n//2 ๋กœ ์ ˆ๋ฐ˜์”ฉ ์คŒ.
    • str() log(n)์ด์ง€๋งŒ, ์ž๋ฆฌ์ˆ˜d๋กœ ํ‘œ๊ธฐํ•˜๋ฉด O(d)
  • ์„ ํ˜•ํƒ์ƒ‰ : O(n)

    • x in sequence
    • slice
    • max, min
    • list์˜ append ์ œ์™ธ insert, del, index, reverse
      • append : O(1) - ์•ˆ์›€์ง์ด๊ณ  ๋งจ ๋’ค์— ์ถ”๊ฐ€๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ.
      • slicing([a:b]) : O(b-a)
      • sort, sorted์˜ ์ •๋ ฌ : nlogn
  • sort, sorted : n log(n)

    • for i ๋‚ด๋ถ€์— while j*=2 or for i while i//2 j+=1
  • ํ•ฉ๋ณ‘์ •๋ ฌ, ํ€ต์ •๋ ฌ : O(n log(n))

    • ์‚ฝ์ž…์ •๋ ฌ, ๊ฑฐํ’ˆ์ •๋ ฌ : O(n^2)
  • ์žฌ๊ท€ : (์žฌ๊ท€์ธ์ž ํฌํ•จ)์žฌ๊ท€๋‚ด๋ถ€๋ณต์žก๋„ * ์žฌ๊ท€1๊ฐœ๋‹น๋ช‡๋ฒˆํ˜ธ์ถœ(n-1์ด๋ฉด n๋ฒˆ, n//2๋ฉด log(n)๋ฒˆ) **(ํ•จ์ˆ˜๋‚ด ์žฌ๊ท€ํ˜ธ์ถœ๊ฐฏ์ˆ˜)

    • 10์”ฉ ์ค„์–ด๋“ ๋‹ค๋ฉด? log10(n)๋ณด๋‹ค๋Š” ์ž๋ฆฌ์ˆ˜d๋กœ O(d)๋กœ ๋‚˜ํƒ€๋ƒ„. 10//n ex> ์ž๋ฆฌ์ˆ˜ํ•ฉ
    • slicing์œผ๋กœ๋„ ์žฌ๊ท€ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ex> ๋ฆฌ์ŠคํŠธ ๋’ค์ง‘๊ธฐ, ์ด์ง„ํƒ์ƒ‰ by ์žฌ๊ท€
  • ๊ทธ์™ธ ์ •๋ฆฌ ๋ธ”๋กœ๊ทธ(์ดˆ๋ณด๋ชฝํ‚ค)

์ •๋ ฌ ์ข…๋ฅ˜๋ณ„ ์‚ฌ์šฉ๋ฒ•

  1. ์„ ํƒ์ •๋ ฌ : ๊ฐ„๋‹จํ•œ ์•„์ด๋””์–ด์ง€๋งŒ O(N^2)์œผ๋กœ ์•ˆ์“ด๋‹ค.
  2. ์‚ฝ์ž…์ •๋ ฌ : ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋ผ๋ฉด, ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. O(N^2)
  3. ํ€ต์ •๋ ฌ : ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜๊ณ  ๋น ๋ฅด๋‹ค. O(NlgN)
  4. ๊ณ„์ˆ˜์ •๋ ฌ : input์ด ์ค‘๋ณต๋˜๋ฉด์„œ&๋„ˆ๋ฌด๋งŽ์ด ๋“ค์–ด์˜ฌ ๋•Œ, ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด index๋กœ ํ‘œ๊ธฐ๊ฐ€๋Šฅํ•  ๋•Œ, input์„ index๋กœ ๊ฐ„์ฃผํ•˜๊ณ  counting๋งŒ ํ•ด์ค€๋‹ค. O(N+K) ๋งค์šฐ ๋นจ๋ผ์ง.
    • ์Œ์ˆ˜๋„ k+์Œ์ˆ˜๋ฒ”์œ„๋กœ ์˜ฌ๋ ค์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.(๋˜๋‹ค๋ฅธ ๋ฐฐ์—ด์— ๋‚˜์—ด์‹œํ‚ฌ ๋•Œ, -1 ๊ณฑํ• ์‹œ ์ˆœ์„œ ๋ฐ”๋€œ ์ฃผ์˜)
    • ๋‚˜๋Š” enumerate๋กœ idx์™€ val์„ ๋ฐ›์€ ๋’ค, idx์˜ ๊ฐฏ์ˆ˜๋ฅผ ์‚ด๋ฆด ๋•Œ [idx] * val๋กœ 2์ฐจ์›์ด ๋˜์ง€๋งŒ, ๊ทธ ๊ฐฏ์ˆ˜๋ฅผ ์‚ด๋ฆฌ๋ ค๊ณ  listํ™” ์‹œ์ผœ์„œ ํ†ต๊ณ„ํ•™์œผ๋กœ ์‚ฌ์šฉํ•จ.

stack๊ณผ queue ๊ตฌํ˜„์‹œ ์ž๋ฃŒ๊ตฌ์กฐ

  • stack : list๋กœ ์ถฉ๋ถ„ํ•จ(push, pop, peek์ด ์ค‘๊ฐ„์— ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ์—†์Œ. -> ํ•˜๋‚˜์”ฉ ๋ฐ€๊ฑฐ๋‚˜ ๋‹น๊ธธ์ผ ์—†์Œ.)
  • queue : dequeue์‹œ ๋งจ์•ž์‚ญ์ œ์‹œ ํ•œ์นธ์”ฉ ์•ž์œผ๋กœ ๋‹ค ์ด๋™ํ•ด์•ผํ•ด์„œ -> linkedList๋กœ ์ œ๊ฑฐํ›„ link๋—๋‹ค ๋ถ™ํ˜”๋‹ค๊ฐ€ ๋น ๋ฆ„.
  • ํ™˜ํ˜•ํ : list๋กœ ์ถฉ๋ถ„ํ•จ. ์ค‘๊ฐ„์— ์‚ฝ์ž…/์‚ญ์ œ๋„ front,rear index๊ฐ€ ์›€์ง์ด๋ฉด์„œ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•จ -> ํ•˜๋‚˜์”ฉ ๋ฐ€๊ฑฐ๋‚˜ ๋‹น๊ธธ์ผ ์—†์Œ..
  • ์šฐ์„ ์ˆœ์œ„ํ : ์ผ๋ฐ˜ํ(dequeue๋กœ ์ธํ•œ ํ•œ์นธ์”ฉ๋ฐ€์–ด์ฃผ๊ธฐ๋กœ -> ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ํ˜ธ)์™€ enqueue๋งŒ ๋‹ค๋ฅด๋‹ค.
    • enqueue์‹œ์—๋„ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ •ํ•ด์ง„ ์šฐ์„ ์ˆœ์œ„ ์ž๋ฆฌ๋ฅผ ์ฐพ์•„๊ฐ€, ์ค‘๊ฐ„ ์‚ฝ์ž…์„ ํ•ด์ค€๋‹ค.
    • ๊ทธ์™ธ ๋ฉ”์†Œ๋“œ๋“ค์€ queue ์™€ ๋™์ผํ•˜๋‹ค.

๋ฌธ์ œ ์†Œ์Šค

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, CodeUp, Codeit, inflearn์—์„œ ์ œ๊ณต๋˜๋Š” ๊ธฐ์ดˆ ๋ฐ level 1 ~ level 3 ์—ฐ์Šต๋ฌธ์ œ๋ฅผ ํ’€์ดํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
    • codeup : while์กฐ๊ฑด ์†์—์„œ ์šฐ์„ ์‹œ๋˜๋Š” ์กฐ๊ฑด์€ if elif else ์˜ ์œ„์ชฝ์šฐ์„ ์ˆœ์œ„๋กœ ์˜ฌ๋ ค๋†“์œผ๋ฉด ์•Œ์•„์„œ ๋‹ค์Œ๋ฃจํ”„์—์„œ ์šฐ์„ ์ˆœ์œ„๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค. ๋‹ค๋งŒ, ํƒˆ์ถœ์กฐ๊ฑด์€ ๊ฐ€์žฅ ๋จผ์ €
  • ์ €์ž‘๊ถŒ์€ ํ•ด๋‹น ์‚ฌ์ดํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

  • master -> main์œผ๋กœ branch ๋ณ€๊ฒฝ
    • local์—์„œ git initํ–ˆ๋‹ค๋ฉด, git checkout -b main๋ถ€ํ„ฐ ํ•˜๊ณ  ์‹œ์ž‘.
  • test.py์— ๋ฌธ์ œ์„ค๋ช… ์† python์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•จ.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published