- ๐ 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)
์ ๋ ฌ๊ณผ ํ์
: ์ ํ/์ด์งํ์ + ์ ํ/์ฝ์ ์ ๋ ฌBrute Force
: ์ ์ฒด ๋ค ์ดํด๋ณด๋ ๋ฐฉ์์ ๋ฌธ์ Divide and Conquer
: ์ฌ๊ท ๋ฑ ๋ถ๋ถ๋ฌธ์ ๊ฐ ์๋ ์ดํด๋ณด๊ธฐDynamic Programming
: ๋ถ๋ถ๋ฌธ์ + ์ค๋ณต๋๋ ๋ฌธ์ ๋ฅผ memo(dict, ๋ถ๋ถ๋ฌธ์ ์์ด ๋ฃ๊ณ ์ ์ฅ) or tabulation(list, base index ๋ฃ์ด๋๊ณ ์ฒ์๋ถํฐ, ๋ถ๋ถ๋ฌธ์ ๊ฐ list[k-1] ๋ฑ)๋ก ํด๊ฒฐํ๊ธฐGreedy Algorithm
: ๋ถ๋ถ๋ฌธ์ + ๊ฐ ๋ถ๋ถ์ด ์ต๋๊ฐ์ ์ ํํ์ ๋๊ฐ ์ ๋ต๊ธฐํ
๋ฑ ๊ตฌํ : ๋ฐฐ๊ฒฝ์ง์์ด ํ์ํ ๊ธฐ์ด ๊ตฌํ ๋ฌธ์ (์ฃผ๋์จTV)- ์์ ํ๋ณ(isPrime2) / ์์ ์นด์ดํ (์๋ผํ ์คํ ๋ค์ค์ ์ฒด) countPrimes2, findPrimes / ์์ธ์๋ถํด factorize2, ์ค๋ณต์ ๊ฑฐ ์์ธ์ ๋ชจ์ findFactors / ๊ณตํต ์์ธ์ commonFactors -> gcd2 ๊ณตํต์์ธ์๋ค์ ๋์ ๊ณฑ/ math.gcd์ ์ต์๊ณต๋ฐฐ์ lcm, lcmFromTo / ๋ฌ๋ ฅ๋ง๋ค๊ธฐ - ์ค๋ ํ๋จ(for2์์ผ์) leapyear, ์ด๋ฒ๋ฌ์ ์ผ์ daysOfMonth, ํด๋น์ 1์ผ์ ์์ผ=์์์์ผ dayOfTheWeek, ์ ์ฒด๋ฌ๋ ฅ์ถ๋ ฅ printCalendar /
์ถ๊ฐ ๊ธฐํ
๊ตฌํ : ์ฝ๋ผ์ธ ์ ์ถ์ธก 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ํ๊ธฐ.
-
์ด์งํ์ : 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
- x
-
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 ์ฌ๊ท
-
๊ทธ์ธ ์ ๋ฆฌ ๋ธ๋ก๊ทธ(์ด๋ณด๋ชฝํค)
- ์ ํ์ ๋ ฌ : ๊ฐ๋จํ ์์ด๋์ด์ง๋ง O(N^2)์ผ๋ก ์์ด๋ค.
- ์ฝ์ ์ ๋ ฌ : ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋ ์ํ๋ผ๋ฉด, ๋น ๋ฅด๊ฒ ์๋ํ ์๋ ์๋ค. O(N^2)
- ํต์ ๋ ฌ : ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ์ ํฉํ๊ณ ๋น ๋ฅด๋ค. O(NlgN)
- ๊ณ์์ ๋ ฌ : input์ด ์ค๋ณต๋๋ฉด์&๋๋ฌด๋ง์ด ๋ค์ด์ฌ ๋,
๋ฒ์๊ฐ ์ ํ๋์ด index๋ก ํ๊ธฐ๊ฐ๋ฅ
ํ ๋, input์ index๋ก ๊ฐ์ฃผํ๊ณ counting๋ง ํด์ค๋ค. O(N+K) ๋งค์ฐ ๋นจ๋ผ์ง.- ์์๋ k+์์๋ฒ์๋ก ์ฌ๋ ค์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.(๋๋ค๋ฅธ ๋ฐฐ์ด์ ๋์ด์ํฌ ๋, -1 ๊ณฑํ ์ ์์ ๋ฐ๋ ์ฃผ์)
- ๋๋ enumerate๋ก idx์ val์ ๋ฐ์ ๋ค, idx์ ๊ฐฏ์๋ฅผ ์ด๋ฆด ๋ [idx] * val๋ก 2์ฐจ์์ด ๋์ง๋ง, ๊ทธ ๊ฐฏ์๋ฅผ ์ด๋ฆฌ๋ ค๊ณ listํ ์์ผ์ ํต๊ณํ์ผ๋ก ์ฌ์ฉํจ.
- 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
๋ถํฐ ํ๊ณ ์์.
- local์์ git initํ๋ค๋ฉด,
- test.py์ ๋ฌธ์ ์ค๋ช ์ python์ฝ๋๋ฅผ ๊ฐ์ ธ์ ๊ตฌํํด๋ณด๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํจ.