์ธ ๋ฒ์งธ ์ฑ
๋๋ ๋์ . ๋ฒ์จ 7๊ธฐ.
ํ์ฌ ๋๋ฃ์๋ ๋ฏผ๊ท๋์ ์ถ์ฒ์ผ๋ก ์๊ฒ๋ ์ฑ
. ์ฑ
๋๋ ๋
์ ๋ชฉ๋ก์ ์๊ธธ๋ ๋ฐ๋ก ์ ์ฒญํ๋ค.
์ค๋ฆฌ์ฝ ๋ฒจ๋ฆฌ์์ ์ค์ ๋ก ์ด๋ค์ง๋ ๊ธฐ์ ๋ฉด์ ๋ฌธ์ ๋ค์ ์๊ฐํ๊ณ , ๊ทธ์ ๋ํ ์ ๋ต์ /์ค์ฉ์ ์ธ ์ ๊ทผ๋ฒ์ ์ ์ํ๋ ์ฑ
์ธ๋ฏ.
์ค์ (๋ฉด์ )์์ ํํด์ง๋ Problem Solving์ ์์ ๋ฌธ์ ๋ฅผ ํตํด ์ฐ์ต์์ผ ์ฃผ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ์ข ์ด๋ ค์ ๋ณด์ธ๋ค.
์ ์์ ์ฎ๊ธด์ด์ ์ด๋ ฅ์ด ํ๋ คํ๋ค.
์ฑ
์ด ๋ฌด๋ ค 904์ชฝ์ด๋ ๋๋ค. ๋ง๊ทธ๋๋ก ์ฑ
์ด ๋๋ฌด ๋๊ป๋ค...
<๋ฐ์ท>
๊ทธ๋ฆฌ๊ณ ๊ธฐ์ตํ์ธ์. ๋ฉด์ ์ ์ด๋ ต์ต๋๋ค! ('์ง์์ด์ ๊ธ' ไธญ)
์ต๋ํ ์ ์ฌ์๊ฐ์ ํ์ฉํด์ ๋
์ํ๊ฒ ๋ค. ์ ์ฌ ๋์๋ฝ ๊ตฌ๋
ํด์ผ๊ฒ ๋ค.
ํ๋์ ํฌ์คํธ์ ๊ณ์ ์
๋ฐ์ดํธ ํ๋ฉด์ ์ ๋ฆฌํ๊ฒ ๋ค.
์ฑ
์ ๋ชฉ์ฐจ ๊ทธ๋๋ก ๋
์์ผ์ง ๊ตฌ์กฐ๋ฅผ ์ก์๋ณผ๊น ์๊ฐ ์ค.
์ ๋ฒ์ node.js ๋์์ธ ํจํด ์ฑ
์ ์ฒซ์ฃผ์ ๋ฐ๋ก ๋๋ํ์๋๋ฐ, ์ด๋ฒ์ ๊ทธ๋ฌ์ง ๋ง์์ผ๊ฒ ๋ค.
์ฌ๋ฐ๊ฒ ๊พธ์คํ ์ฝ์ด๋ณด์!!
๋ฌธ์ ํ์ด(problem solving) ๋ฅ๋ ฅ์ ๋ณด์ฌ์ค์ผํจ. ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ฝ๋ฉ์ผ๋ก.
๊ตฌ์ฒด์ ์ผ๋ก๋,
์ง์์๋ค์ด ํํ ํ๋ ๋ถํ ๊ณผ ๊ธ์ด์ด์ ์ผ๊ฐ.
๊ฒฐ๊ตญ ์ฌ๋ฐ๋ฅธ ์ํฉ์์ ๋ฉด์ ์ด ์ ์ด๋ฃจ์ด์ก์ ๋, ๋ฌธ์ ํ์ด ๋ฅ๋ ฅ์ ๋ณด์ฌ ์ค ์ง์์๊ฐ ๋๋ํ๋ค๊ณ ์๊ธฐํ๋ ๊ฒ์ ํฉ๋ฆฌ์ ์ธ ํ๋จ์ด๋ค.
๋ฉด์ ํ์ ์๋ฌด ์ฐ๋ฝ์ ๋ฐ์ง ๋ชปํ๋๋ผ๋ ๋ณดํต์ ๋จ์ด์ง ๊ฒ์ด ์๋๋ค. ํ๋ฝํ ์ง์์์๊ฒ ์ฐ๋ฝ์ ์ฃผ์ง ์๋๋ค๋ ์ ์ฑ
์ ๊ฐ๊ณ ์๋ ํ์ฌ๋ ์ผ๋ง ๋์ง ์๋๋ค.
๋ฉด์ ๋์์๋ก ์ ์ ๋๋ฉด, ๋ณดํต ์ฌ์ ๋ฉด์ (screening interview)์ ํจ. ๋ง์ฝ ์์ง๋์ด๊ฐ ํด๋น ๋ฉด์ ์ ์ฐธ์ฌํ๋ฉด ๊ธฐ์ ์ ์ธ ์ง๋ฌธ์ด ๋์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋๋ฉด ๋ฉด์ ์ ๋ณดํต 3 ~ 6 ๋ฒ ์ ๋. ๊ทธ ์ค์ ์ ์ฌ์์ฌ๋ฅผ ๊ฐ์ด ํ๋ ๋ฉด์ ์ด ์๊ธฐ๋ ํ๋ ๊ธฐ์ ์ ์ธ ๋ฌธ์ ๋ ๋ค๋ฃจ์ง ์๊ณ ํ๊ฐ์ ํฌํจ๋์ง ์๊ธฐ๋ ํ๋ค. ํ์ ๊ด์ฌ์ฌ, ํ์ฌ ๋ฌธํ์ ๋ํด ์ง๋ฌธํ ์ ์๋ ์ข์ ๊ธฐํ.
<๋ง์ดํฌ๋ก์ํํธ ๋ฉด์ >
<์๋ง์กด ๋ฉด์ >
<๊ตฌ๊ธ ๋ฉด์ >
<์ ํ ๋ฉด์ >
<ํ์ด์ค๋ถ ๋ฉด์ >
<ํฐ๋ฐํฐ์ด ๋ฉด์ > (๋ฏธ๊ตญ์ ๋น ๋ฐ์ดํฐ ํ๋ก์ธ์ฑ ๊ธฐ์ . CIA, FBI, FDA, ๋ฏธ๊ตญ๋ฐฉ๋ถ ๋ฑ ์ ๋ถ ์ฌ์ ๋ง์ด ํจ. ๋๋ฌด์ํค)
์ด๊ฒ ๋ํ ์ฌ์ง ์์ด '๋ฌธ์ ๋ฅผ ํ์ด๋ด๋ ๋ฅ๋ ฅ: ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ฝ๋ฉ' ์ด ๊ฐ์ฅ ์ค์.
[๊ฒฝ๋ ฅ์]
์์คํ
๋์์ธ ๋ฐฉ๋ฉด์ ๊ฒฝํ์ ์ง์
์ ์ผ๋ก๋ง ์ป์ ์ ์๋ค๊ณ ์ฌ๊ฒจ์ง๊ธฐ ๋๋ฌธ์, ์์คํ
๋์์ธ/์ค๊ณ ์ ๊ด๋ จ๋ ์ง๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
[ํ
์คํฐ or SDET(Software Design Engineers in Test)]
์ค์ ์ ํ์ด ์๋ ํ
์คํธ๋ฅผ ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ง๊ตฐ.
์ฝ๋ฉ๊ณผ ํ
์คํธ ๋ ๋ค ์ํด์ผํจ.
SDET์์ ๊ฐ๋ฐ ์ง์ผ๋ก ์ง๋ฌด ์ ํ ํ๊ธฐ๋ ์์ฃผ ์ด๋ ต๋ค. ์ ์คํ ๊ฒฐ์ ํ ๊ฒ.
[PM]
์ฝ๋ฉ๊ณผ ๊ด๊ณ๋ ์ผ์ ์ฃผ๋ก ํ๋ PM๋ค์ ์ฝ๋ฉ๋ ์ํด์ผ ํจ.
[๊ฐ๋ฐ ์ฑ
์์(dev lead) ์ ๊ด๋ฆฌ์]
์ฝ๋ฉ ๋ฅ๋ ฅ๊ณผ ์ธ์ฑ.
[์คํํธ์
]
๊ฐ์ธ์ ์ผ๋ก ์ถ์ฒ์ ๋ฐ์์ ์ง์ํ๋ ๊ฒ์ด ๋ฒ ์คํธ.
๋ฐ๋ก ํ์ฉํ ์ ์๋ ์ฝ๋ฉ ๋ฅ๋ ฅ ๋ฟ๋ง ์๋๋ผ ์ฌ์
๊ฐ์ ์์ง์ด ์๊ตฌ๋๋ ํ๊ฒฝ.
๋๊ธฐ์
์ ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ์ผ๋ฐ์ ์ ์ฑ์ ํ๊ฐํ๋ ๋ฐ๋ฉด, ์คํํธ์
์ ์ง์์์ ์ธ์ฑ, ๊ธฐ์ , ๊ณผ๊ฑฐ ๊ฒฝ๋ ฅ์ ์์ธํ ๋ค์ด๋ค๋ณด๋ ๊ฒฝํฅ.
[๊ธฐ์
์ธ์ ๋ฐ ์ธ์ฌ ์์
]
๊ธฐ์
์ธ์ ์์, ๋ชจํ์ฌ๊ฐ ์คํํธ์
์ ์ ์ง์๊ณผ ๋ฉด์ ์ ํ๊ณ ์ ํ ์ ์์.
์ด ๋ฉด์ ์, ํด๋น ๋ชจํ์ฌ์ ์ผ๋ฐ์ ์ธ ์ง์์์ ๊ฑฐ์ ๋น์ทํ ๋ฉด์ ์ ๋ณด๊ฒ ๋ ๊ฒ. (์ด ์ฑ
์ ๋์ค๋ ๋ฉด์ ๋ด์ฉ๊ณผ ๊ต์ฅํ ๋น์ทํด์ง ๊ฒ)
๋จ์ด์ง๋ฉด, ์ธ์๋ ํ์ฌ์ ์
์ฌํ ์ ์๋ค. ๋ง์ฝ ๋๋ค์์ ์ง์์ด ๋ฉด์ ์ ๋ง์น๋ฉด ์ธ์ ์์ฒด๊ฐ ๋ฌด์ฐ๋ ์ ์๋ค.
์ ์ฌ์ ์ผ๋ก ํจ๊ป ๋ฉด์ ์ ์ค๋นํ๋ ๊ฒ์ด ์ข๊ณ , ์๊ฐ์ ์ฌ์ ๋ฅผ ๋๋ฌด ๋ถ๋ฆฌ์ง ์๋ ๊ฒ์ด ์ข์.
[๋ฉด์ ๊ด๋ค์๊ฒ ์ฃผ๋ ์กฐ์ธ]
[์ด๋ ฅ์ ์ค๋น]
ํ๋ฅญํ ๊ฒฝํ -> ํํํ ์ด๋ ฅ์ -> ๋ฉด์ ๊ธฐํ ํ๋
์ด๋ฏธ ์ง์ฅ์ธ์ธ ๊ฒฝ์ฐ,
๊ฒฐ๊ตญ, ์ฝ๋ฉ์ ํ ์ ์๊ณ ์๋ฆฌํ ์ฌ๋์์ ๋ณด์ฌ์ค์ผ ํจ.
[์ด๋ ฅ์ ์์ฑ]
์ด๋ ฅ์๋ ์งง์ผ๋ฉด ์งง์ ์๋ก ์ธ์์ ๋จ๋๋ค.
๋ฏธ๊ตญ์์๋ ๊ฒฝ๋ ฅ์ด ์ญ ๋
๋ฏธ๋ง์ธ ๊ฒฝ์ฐ ์ด๋ ฅ์๋ฅผ ํ ํ์ด์ง๋ก ๋ง๋ค๋๋ก ๊ถ์ฅ
๊ตฌ์ธ ๋ด๋น์๋ ์ด๋ ฅ์๋ฅผ ๊ธฐ๊ปํด์ผ 10์ด ์ ๋ ๋ด. ์ด๋ค ์ฌ๋์ ๊ธด ์ด๋ ฅ์๋ฅผ ์์ ๋ฌด์ํด ๋ฒ๋ฆฌ๊ธฐ๋
์ด๋ ฅ์ ๊ฐ ํญ๋ชฉ์ ๋ํด์๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ์ธ
์๋ ๊ฐ์ ๊ฒฝ์ฐ๋ค์ '๋์ธ'์ผ๋ก ์์ฉํ ์๋ ์์
ํ์์๋ ๋ค์ํ ์ธ์ด๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด ๋ณด๋ ๊ฒฝํ์ด ์ข์.
๊ธฐ์ ์ง๋ฌธ๊ณผ ๋์๋๋ 'ํ๋ ์ง๋ฌธ(behavioral questions)' ์๋ ๋๋นํด์ผ ํจ.
๊ฒฝํ ๊ด๋ จ ์ง๋ฌธ์ด๋ผ๊ณ ์ดํดํ ์ ์์.
๋ณดํต,
ํ๋ค.
[ํ๋ก์ ํธ ๊ฒฝํ]
์ธ ๊ฐ ์ ๋์ ํ๋ก์ ํธ์ ๋ํด์๋ ์์ธํ ๋งํ ์ ์์ด์ผ ํ๋ค.
๊ธฐ์ ์ ์ธ ๋ถ๋ถ์ ๋ํด์ ๊น์ด ์๊ฒ ๋
ผ์ํ ์ ์์ด์ผ ํ๋ค.
์ด๋ ฅ์์ ์์ฑํ ํ๋ก์ ํธ์ ๋ํด ์๋์ ํ ์ด๋ธ์ ์์ฑํด๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉด์ ์ ์ ์ด ํ ์ด๋ธ์ ์ฌ์ฉํด ๊ณต๋ถํ๋ค.
ํํ ๋์ค๋ ๋ฌธ์ | ํ๋ก์ ํธ 1 | ํ๋ก์ ํธ 2 | ํ๋ก์ ํธ 3 |
---|---|---|---|
๊ฐ์ฅ ๋์ ์ ์ด์๋ ๊ฒ | |||
์ค์ ํน์ ์คํจ๋ด | |||
์ฆ๊ฑฐ์ ๋ ๊ฒ | |||
๋ฆฌ๋์ญ | |||
ํ์๊ณผ์ ๊ฐ๋ฑ | |||
๋จ๋ค๊ณผ ๋ค๋ฅด๊ฒ ํ๋ํ๋ ๊ฒ |
[๋จ์ ]
๋จ์ ์ ์๊ธฐํ ๋๋ '์ง์ง ๋จ์ '์ ์๊ธฐํ๋ผ. ์๋ฒฝ์ฃผ์ ๊ฐ์ ๋๋ต์ ์ค๋งํ๊ฑฐ๋ ์ค์๋ฅผ ์ธ์ ํ์ง ์๋ ์ฌ๋์ด๋ผ๋ ์ธ์์ ์ค ์ ์์
[๋ฉด์ ๊ด์๊ฒ ํ ์ง๋ฌธ]
๋ฉด์ ๊ด์๊ฒ ํ ์์ง์ ์ง๋ฌธ์ ์ค๋นํด์ผ ํจ. ์์/๋ฌด์์ ์ ์ผ๋ก ๋ฉด์ ๊ด์ ๊ฒฐ์ ์ ์ํฅ์ ์ค.
[๋์ฒ ์๋ น]
์ค๋งํ์ง ์์ผ๋ฉด์๋ ๊น์ ์ธ์์ ์ฌ์ด์ฃผ๋ ค๋ฉด '๊ตฌ์ฒด์ ' ์ผ๋ก ๋ต๋ณํ๋ฉด ๋๋ค.
'์ฐ๋ฆฌ ํ'์ ๋ํ ์ด์ผ๊ธฐ๊ฐ ์๋๋ผ, '๋'์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํด์ผ ํ๋ค.
๊ตฌ์กฐ์ ์ผ๋ก ๋ต๋ณํด์ผ ํ๋ค.
[์๊ธฐ ์๊ฐ]
ํ๊ตญ ๊ธฐ์
๋ฉด์ ์์ ํ๋ '1๋ถ ์๊ธฐ์๊ฐ' ์๋ ์กฐ๊ธ ๋ค๋ฅธ ๋ฌ์์ค ๊ฐ๊ธฐ๋ ํ์ง๋ง, tell me about yourself ๋ผ๋ ์ง๋ฌธ์ ๋ฐ์์ ๋.
๋ณดํต, ์๊ฐ์ ๊ตฌ์กฐ๋ก ์ด์ผ๊ธฐ๋ฅผ ํ๋ฉด ์์ฐ์ค๋ฝ๋ค.
ํ์ฌ ์ง์
(์๋) - ํ๊ต - ์กธ์
ํ ์ง๊ธ๊น์ง - ํ์ฌ ์ญํ - ์
๋ฌด ์ธ(์ทจ๋ฏธ ํน์ ์ง๋ฌด ๊ด๋ จ ํ๋) - ๋ง๋ฌด๋ฆฌ
์ทจ๋ฏธ๋ ์ฌ์ค ์ด์ผ๊ธฐ ํ์ง ์์๋ ๋ฌด๋ฐฉํ์ง๋ง, ์ ์ฉํ ๋๊ฐ ์๋ค.
์ด์จ๋ ๊ฐ์, ์์ฐ์ค๋ฝ๊ฒ ๋์ ์ฑ๊ณต์ฌ๋ก๋ฅผ ๋๋ฌ๋ผ ์ ์๋ ์ด์ผ๊ธฐ๋ฅผ ํด์ผ ํ๋ค.
[์๊ฐ ๋ณต์ก๋]
์๊ณ ๋ฆฌ์ฆ์ '์ ๊ทผ์ ์คํ ์๊ฐ' (asymptotic runtime). (asymptotic: ์ ๊ทผ์ ์)
O (big-O) - ์๊ฐ์ ์ํ. ์๊ณ ๋ฆฌ์ฆ์ ์คํ์๊ฐ์ด ์๊ฐ๋ณด๋ค ๋ฎ๊ธฐ๋ง ํ๋ฉด ํ๊ธฐ ๊ฐ๋ฅ.
ฮฉ (big-Omega) - ์๊ฐ์ ๋ฑ๊ฐ ํน์ ํํ. ์๊ณ ๋ฆฌ์ฆ์ ์คํ์๊ฐ์ด ์๊ฐ๋ณด๋ค ๋๊ธฐ๋ง ํ๋ฉด ํ๊ธฐ ๊ฐ๋ฅ.
ฮ (big-theta) - O(N) ์ด๋ฉด์ ฮฉ(N) ์ด๋ฉด, ฮ(N) ์ด๋ค.
์ ๊ณ(๋ฉด์ )์์ big-O ๋ big-theta ์ ์๋ฏธ์ ๊ฐ๊น๋ค. ์ฆ, ์ํ์๊ฐ์ ๋ฑ ๋ง๊ฒ ํํํ ๊ฒ์ด big-O.
[์ต์ / ์ต์
/ ํ๊ท ]
์ต์ /์ต์
/ํ๊ท ์ ๊ฒฝ์ฐ๋ ๊ทธ ์
๋ ฅ(์ํฉ)์ ์๋ฏธ. big-O, big-Omega, big-theta ์๋ ๋ฌด๊ด.
๊ทธ ๊ฐ๊ฐ์ ์
๋ ฅ(์ํฉ)์ ์ํ์๊ฐ์ big-O ์๊ฐ์ผ๋ก ์ค๋ช
ํ๋ ๊ฒ์ผ ๋ฟ.
๋ณดํต์ ํ๊ท ์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํ๋ ๋ฏ.
e.g. ํต์ ๋ ฌ
์ต์ ์ ๊ฒฝ์ฐ - ๋ฐฐ์ด์์ ๋ชจ๋ ์์๊ฐ ๋์ผํ ๊ฒฝ์ฐ, ์ํ ์๊ฐ์ O(N). (๋ฐฐ์ด์ด ์ ๋ ฌ๋์ด ์์ ๋ ์ด๋ด ์ ์๋ ๊ตฌํ ๋ฐฉ์์ด ์กด์ฌ)
์ต์ ์ ๊ฒฝ์ฐ - ๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ์์๊ฐ ๊ณ์ํด์ pivot์ผ๋ก ์ ์ ๋ ๊ฒฝ์ฐ (๋ฐฐ์ด์ด ์ญ์์ผ๋ก ์ ๋ ฌ๋์ด ์๊ณ , ํญ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ pivot์ผ๋ก ํ ๊ฒฝ์ฐ), ์ํ์๊ฐ์ O(N^2).
ํ๊ท ์ ๊ฒฝ์ฐ - O(N*logN)
[๊ณต๊ฐ ๋ณต์ก๋]
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ผ๋ง๋ ์ฐจ์งํ๋๋.
๊ธธ์ด๊ฐ n๊ฐ์ธ ๋ฐฐ์ด์ ๋ง๋ค๊ธฐ ์ํด์๋ O(n)์ ๊ณต๊ฐ์ด ํ์.
์ฌ๊ท ํธ์ถ์ n๋ฒ ํ๋ฉด O(n) ๋งํผ ํธ์ถ ์คํ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ฒ ๋จ.
๋จ์ ํจ์ ํธ์ถ์ n๋ฒ ํ๋ฉด ๋จ์ง O(1) ๋งํผ์ ํธ์ถ ์คํ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ฒ ๋จ. (๊ฐ ํธ์ถ์ด ํธ์ถ ์คํ์ ๋์์ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก)
[์ต๊ณ ์ฐจํญ]
์ต๊ณ ์ฐจํญ์ ์ ์ธํ ๋๋จธ์งํญ ๊ทธ๋ฆฌ๊ณ ์์ํญ์ ๋ฌด์ํด๋ ๋๋ค.
[์ํ ์๊ฐ]
์ด๋ค ์ฐ์ฐ์ ์ํ์๊ฐ์ด ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ๋ ํ๊ท ์ ์ธ ์ํ์๊ฐ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ.
์ต์
์ ๊ฒฝ์ฐ๋ ๊ฐ๋ ๋ฐ์ํ์ง๋ง, ํ ๋ฒ ๋ฐ์ํ๋ฉด ๊ทธ ํ๋ก ๊ฝค ์ค๋ซ๋์ ๋ํ๋์ง ์๋๋ค.
๋ฐ๋ผ์ ์ต์
์ ๊ฒฝ์ฐ์ ๋ฐ์ํ ๋น์ฉ(์ํ ์๊ฐ)์ ๋๋จธ์ง ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์์์ ์ํ์๊ฐ์์ ๋ถํ ์ํ ํ๋ค๋ ๊ฐ๋
.
ArrayList ์ ์์๋ฅผ ์ฝ์ ํ ๋, ๋ฐฐ์ด์ด ๊ฝ ์ฐจ ์์ผ๋ฉด ๊ธฐ์กด ๋ฐฐ์ด ํฌ๊ธฐ์ 2๋ฐฐ์ธ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๊ธฐ์กด ์์๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํ๋ค.
๋ง์ฝ N๊ฐ์ ์์๊ฐ ๊ฝ ์ฐจ์๋ ๋ฐฐ์ด์ ์์ ํ๋๋ฅผ ์ฝ์ ํ๋ ค๋ฉด O(N) ์ํ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
ํ์ง๋ง ๊ฝ ์ฐจ ์์ง ์์ ๊ฒฝ์ฐ์ ์์๋ฅผ ์ฝ์ ํ ๋๋ ์ธ์ ๋ O(1) ์ํ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 1,2,4,8,16,...,X ๋ก ์ฆ๊ฐ ํ๋ค๊ณ ํ๋ฉด, ๊ฐ ์ฆ๊ฐ์์ ๋ณต์ฌํด์ผ ํ๋ ์์์ ๊ฐ์๋ 1,2,4,8,16,...,X ์ด๋ค.
์ด ๊ฐ์๋ค์ ํฉ์ X+X/2+X/4+X/8+...+1 ๊ณผ ๊ฐ์ผ๋ฏ๋ก ๋๋ต 2X ๊ฐ ๋๋ค.
๋ฐ๋ผ์ X๊ฐ์ ์์๋ฅผ ์ฝ์ ํ์ ๋ ํ์ํ ์๊ฐ์ O(2X) ์ด๊ณ , ์ด๋ฅผ X๋ฒ์ ์ฝ์ ์ ๋ํด ๋ถํ ์ํํ๋ค๊ณ ํ๋ฉด ์ฝ์ ํ ๋ฒ์ ํ์ํ ์๊ฐ์ O(2X/X) ์ฆ O(1)์ด๋ค.
[log N ์ํ ์๊ฐ]
์ด๋ค ๋ฌธ์ ์์ ์์์ ๊ฐ์๊ฐ ์ ๋ฐ์ฉ ์ค์ด๋ ๋ค๋ฉด, ๊ทธ ๋ฌธ์ ์ ์ํ์๊ฐ์ O(logN)์ด ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. (N๊ฐ์ ๋
ธ๋๋ฅผ ๊ฐ์ง ๊ท ํ์ด์งํ์ํธ๋ฆฌ์ ๋์ด๋ logN)
๋ก๊ทธ์ ๋ฐ์ ์๊ด์๋ค. ๋ก๊ทธ์ ๋ฐ์ ๋ฐ๋ฅธ ์ฐจ์ด๋ ์์ํญ ๋งํผ์ ์ฐจ์ด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
[์ฌ๊ท์ ์ธ ์ํ ์๊ฐ]
๋ค์์ ํธ์ถ๋ก ์ด๋ฃจ์ด์ง ์ฌ๊ท ํจ์์์ ์ํ์๊ฐ์ ๋ณดํต O(๋ถ๊ธฐ^๊น์ด) ๋ก ํํ๋๊ณค ํจ. (๋ฑ๋น ์์ด์ ํฉ์ big-O ์ ์ฉ)
๋ถ๊ธฐ(branch) : ์ฌ๊ท ํจ์๊ฐ ์์ ์ ์ฌํธ์ถ ํ๋ ํ์
๊น์ด : ์ฌ๊ท ํจ์์ ์ข
๋ฃ ์กฐ๊ฑด๊ณผ ๊ด๋ จ (if n<=1 ์์ ์ข
๋ฃํ๋ฉด ๊น์ด๋ n์ด ๋๋ ๊ฒ)
[์์ ๋ฐ ์ฐ์ต๋ฌธ์ ]
์ค์ฒฉ ๋ฐ๋ณต๋ฌธ
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
System.out.println(i + "," + j);
}
}
๋ฐ๋ณต ํ์๋ฅผ ์ธ์ด๋ณด๊ธฐ :
์์ชฝ ๋ฐ๋ณต๋ฌธ์ด n-1๋ฒ, n-2๋ฒ, n-3๋ฒ, ... , 1๋ฒ ์ํ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ค ๋ํ๋ฉด ๋จ.
1๋ถํฐ x๊น์ง์ ํฉ์ x(x+1)/2 ์ด๋ฏ๋ก (n-1)n/2 ๋ฒ, ์ฆ O(n^2) ์ ์ํ์๊ฐ์ ๊ฐ์ง.
ํ๊ท ์ ์ด์ฉํ ๋ฐฉ๋ฒ :
์์ชฝ ๋ฐ๋ณต๋ฌธ์ด n-? ๋ฒ ๋ฐ๋ณต๋ ๊ฒ.
๋ฐ๊นฅ์ชฝ ๋ฐ๋ณต๋ฌธ์ด n ๋ฒ , ๊ทธ ๋๋ง๋ค ์์ชฝ ๋ฐ๋ณต๋ฌธ์ด n-? ๋ฒ ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ์ n(n-?) ๋ฒ, ์ฆ O(n^2) ์ ์ํ์๊ฐ์ ๊ฐ์ง.
์ฌ๊ท ํธ์ถ
// ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ์์ ๋ชจ๋ ๋
ธ๋์ ๊ฐ์ ๋ํ๋ ์ฝ๋
int sum(Node node) {
if (node == null) {
return 0;
}
return sum(node.left) + node.value + sum(node.right);
}
์ฌ๊ท ํธ์ถ์ ๊ฒฝ์ฐ, ์ํ์๊ฐ์ ํจ์ ํธ์ถ ํ์ ์ฆ, ํธ์ถ ํธ๋ฆฌ์ ๋
ธ๋ ๊ฐ์์ ๋น๋กํ๋ค.
์ด ๊ฒฝ์ฐ, ์
๋ ฅ ์์ฒด๊ฐ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ์ด๋ฏ๋ก ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ์ ๋
ธ๋์ ๊ฐ์๊ฐ n์ด๋ฉด ์ํ์๊ฐ์ O(n)์ด๋ค.
์์์ ์ธ๊ธ๋ O(๋ถ๊ธฐ^๊น์ด)๋ก ์ ๊ทผํ๊ณ ์ ํ๋ฉด ๋ถ๊ธฐ๋ 2, ๊น์ด๋ logn ์ด ๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ๊ฒฐ๊ตญ O(2^logn)=O(n)์ด ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ด ๋ง๋ค์ด๋ด๋ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์์ ํจ์์ ํธ์ถ ํ์๋ฅผ ํผ๋ํ๋ฉด ์๋๋ค.
๊ธธ์ด๊ฐ n์ธ ๋ฌธ์์ด์ ๋ํ ์์ด์ ์ ๋ถ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ค๊ณ ํ์. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๊ท ํธ์ถ๋ก ๋์ํ๋ค.
๊ฐ๋ฅํ ์์ด์ ๊ฐ์๋ ์ด n! ์์ ์ตํ ์๊ณ ์๋ค. ํ์ง๋ง ํจ์ ํธ์ถ ํ์(์ํ์๊ฐ)์ด n! ์ธ ๊ฒ์ ์๋๋ค.
ํธ์ถ ํธ๋ฆฌ์์ ๋ฆฌํ ๋ ธ๋์ ๊ฐ์๊ฐ n!์ด ๋ ๊ฒ์ด๊ณ , ๋ฃจํธ์์ ๊ฐ ๋ฆฌํ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ n์ด ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ ์ฒด ๋ ธ๋(ํจ์ ํธ์ถ)์ ๊ฐ์๋ n*n! ๊ฐ๋ฅผ ๋์ง ๋ชปํ ๊ฒ์ด๋ค.
์ฆ, ์ด ์ํ์๊ฐ์ O(n*n!)์ ๋์ง ์์ ๊ฒ์ด๋ค.
[์ค๋นํ๊ธฐ]
[ํ์ ๊ธฐ๋ณธ๊ธฐ]
์๋ฃ๊ตฌ์กฐ / ์๊ณ ๋ฆฌ์ฆ
- ์๋ฃ๊ตฌ์กฐ
- ์ฐ๊ฒฐ๋ฆฌ์คํธ (Linked Lists)
- ํธ๋ฆฌ, ํธ๋ผ์ด (Tries), ๊ทธ๋ํ
- ์คํ & ํ
- ํ
- Vector / ArrayList
- ํด์ํ ์ด๋ธ
- ์๊ณ ๋ฆฌ์ฆ
- BFS
- DFS
- ์ด์ง ํ์
- ๋ณํฉ ์ ๋ ฌ
- ํต ์ ๋ ฌ
- ๊ฐ๋
- ๋นํธ ์กฐ์ (Bit Manipulation)
- ๋ฉ๋ชจ๋ฆฌ (์คํ vs ํ)
- ์ฌ๊ท
- ๋์ ํ๋ก๊ทธ๋๋ฐ (Dynamic Programming)
- big-O ์๊ฐ & ๊ณต๊ฐ
์ฌ์ฉ๋ฒ, ๊ตฌํ๋ฒ, ์ ํ๋ฆฌ์ผ์ด์
, ๊ทธ๋ฆฌ๊ณ ๊ณต๊ฐ & ์๊ฐ ๋ณต์ก๋์ ๋ํด์ ์์๋์ด์ผ.
์ง์ ๊ตฌํํด๋ณด๊ธฐ๋ฅผ ์ถ์ฒ (์ข
์ด -> ์ปดํจํฐ)
[์ค์ ๋ฌธ์ ์ดํด๋ณด๊ธฐ]
[์ต์ ํ ๋ฐ ๋ฌธ์ ํ์ด ๊ธฐ์ ]
#1. BUD๋ฅผ ์ฐพ์ผ๋ผ
BUD๋ ๋ค์์ ์ฝ์์ด๋ค.
๋ณ๋ชฉ ํ์ (Bottlenecks)
๋ถํ์ํ ์์ (Unnecessary Work)
์ค๋ณต๋๋ ์์ (Duplicated Work)
๋ณ๋ชฉํ์ : ์๊ณ ๋ฆฌ์ฆ์์ ์ ์ฒด ์ํ ์๊ฐ์ ์ก์๋จน๋ ๋ถ๋ถ.
์์ : ์๋ก ๋ค๋ฅธ ์ ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ด ์์ ๋ ๋ ์ ์์ ์ฐจ์ด๊ฐ k์ธ ์์ ๊ฐ์๋ฅผ ์ธ๋ผ. ์๋ฅผ ๋ค์ด ์ฃผ์ด์ง ๋ฐฐ์ด์ด {1, 7, 5, 9, 2, 12, 3}์ด๊ณ k=2๋ฉด, ๋ ์ ์์ ์ฐจ์ด๊ฐ 2์ธ ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ค ๊ฐ๊ฐ ์กด์ฌํ๋ค. (1,3), (3,5), (5,7), (7,9)
์๋์ ๊ฐ์ ๋ถ์์ ํ ์ ์๋ค.
brute force -> ๊ฐ๋ฅํ ์์ ์ ๋ถ ๋ง๋ค๊ณ , ๊ฐ ์ ๋ด๋ถ์ ์ฐจ์ด๋ฅผ ๋ชจ๋ ๊ตฌํ ๋ค ๊ทธ ๊ฐ์ด ์ ํํ k๊ฐ ๋๋ ์์ ๊ฐ์๋ฅผ ์ผ๋ค.
-๋ณ๋ชฉ์ง์ -> ๊ฐ๋ฅํ ์์ ์ ๋ถ ๋ง๋๋ ๊ฒ. ์ฆ, ๊ฐ ์์ ๋ ๋ฒ์งธ ์์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ฐพ๋ ๊ฒ.
๊ฐ์ ์ -> ๋ฐฐ์ด์ ์ ๋ ฌํ๋ฉด, ๊ฐ ์์ ์ฒซ ๋ฒ์งธ ์์์ ๋ํด k๋งํผ ์ ๋ค๋ก ์ฐจ์ด๋๋ ์ ์๋ฅผ ์ด์ง ํ์์ผ๋ก ์ฐพ์ ์ ์๋ค.
-์ ๋ณ๋ชฉ์ง์ -> ๋ฐฐ์ด์ ์ ๋ ฌํด์ผ ํ๋ค(nlogn). ๊ฒ์ํ๋ ๋ถ๋ถ (์ง๊ธ์ ์ด์ง ํ์) ์ ์๋ฌด๋ฆฌ ๊ฐ์ ํด๋ ์ ๋ ฌํ๋ ์๊ฐ์ ๊ทธ๋๋ก.
์ ๊ฐ์ ์ -> ๋ชจ๋ ์์๋ฅผ ํด์ ํ
์ด๋ธ์ ๋ฃ์ผ๋ฉด(n) ๋ฐฐ์ด์ ์ ๋ ฌํ์ง ์์๋ ๋๊ณ , ๋ ๋ฒ์งธ ์์๋ฅผ ์ฐพ๋ ๊ฒ๋ ํด์ํ
์ด๋ธ๋ก ์์์๊ฐ์ ์ฐพ์ ์ ์๋ค.
๋ถํ์ํ ์์
์์ : a,b,c,d๊ฐ 1์์ 1000 ์ฌ์ด์ ์๋ ์ ์ ๊ฐ ์ค ํ๋์ผ ๋ a^3 + b^3 = c^3 + d^3 ์ ๋ง์กฑํ๋ ๋ชจ๋ ์์ฐ์๋ฅผ ์ถ๋ ฅํ์์ค.
์๋์ ๊ฐ์ ๋ถ์์ ํ ์ ์๋ค.
brute-force -> O(n^4)
n = 1000
for a from 1 to n
for b from 1 to n
for c from 1 to n
for d from 1 to n
if a^3 + b^3 == c^3 + d^3
print a, b, c, d
-๋ถํ์ํ ์์ -> d๊ฐ์ด ์ ํด์ก์ผ๋ฉด, ๋๋จธ์ง d์ ํ๋ณด๋ค์ ํ์ธํ์ง ์์๋ ๋๋ค.
n = 1000
for a from 1 to n
for b from 1 to n
for c from 1 to n
for d from 1 to n
if a^3 + b^3 == c^3 + d^3
print a, b, c, d
break // ๋ฃจํ์์ ๋น ์ ธ๋์จ๋ค.
-๋ถํ์ํ ์์ -> a,b,c ๊ฐ์ด ์ ํด์ง ์ํฉ์์ ์ ํจํ d์ ๊ฐ์ ์์์ผ๋ก ๊ตฌํ ์ ์๋ค. -> O(n^3)
n = 1000
for a from 1 to n
for b from 1 to n
for c from 1 to n
d = pow(a^3 + b^3 - c^3 , 1/3) // ์ ์๋ก ๋ฐ์ฌ๋ฆผ ๋จ
if a^3 + b^3 == c^3 + d^3
print a, b, c, d
์ค๋ณต๋๋ ์์
์์ ๊ฐ์ ์์ .
-์ค๋ณต๋๋ ์์
-> (a,b)์ ๋ํ์ฌ ์ด๋ฅผ ๋ง์กฑํ๋ (c,d)๋ฅผ ๋งค๋ฒ ๊ตฌํด์ผ ํจ.
(c,d) = c^3 + d^3 ๊ฐ ๋ง๋ค ์ ์๋ '๊ฐ'๋ค์ ์ ํด์ ธ ์์ผ๋ฏ๋ก, ๋งค๋ฒ ๊ตฌํ์ง ๋ง๊ณ ๋ฏธ๋ฆฌ ๋ค ๊ณ์ฐ์ ํด๋์ด ํ์ํ ๋ ์ฐพ์ ์ด๋ค.
์ฆ, ํด์ํ
์ด๋ธ์ ์ด์ฉํด ๊ฐ๋ฅํ '๊ฐ'๋ค์ key๋ก ํ๊ณ ๊ทธ '๊ฐ'์ ๋ง๋ค ์ ์๋ (c,d)์ ์์ ๋ฆฌ์คํธ๋ฅผ value๋ก ๊ด๋ฆฌํ๋ค.
n = 1000
for c from 1 to n
for d from 1 to n
result = c^3 + d^3
map[result] ์ (c,d) ์ถ๊ฐ.
for a from 1 to n
for b from 1 to n
key = a^3 + b^3
list = map.get(key)
for pair in list
print a, b, pair
์ฌ์ค (a,b) ์ ๋ํ ๊ฐ์ ์กฐ๊ฑด(๊ฐ๊ฐ์ ์ธ์ ๊ณฑ์ ํฉ)์ด๊ธฐ ๋๋ฌธ์ (c,d)์ ๊ณ์ฐ๋ ๋ฆฌ์คํธ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
n = 1000
for c from 1 to n
for d from 1 to n
result = c^3 + d^3
map[result] ์ (c,d) ์ถ๊ฐ.
for result, list in map
for pair_1 in list
for pair_2 in list
print pair_1, pair_2
๊ฒฐ๊ตญ O(n^2) ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
#2. ๋ฌธ์ ์ ๋ต์ ์์ผ๋ก ์ง์ ๊ตฌํด๋ณด๋ผ
์ค์ ์์ ๋ฅผ ํตํด ์ง๊ด์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด๋๊ฐ๋ ๊ฒ์์๋ถํฐ ์์ํ ์ ์๋ค.
์์ : ๊ธธ์ด๊ฐ ์์ ๋ฌธ์์ด s์ ๊ธธ์ด๊ฐ ๊ธด ๋ฌธ์์ด b๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฌธ์์ด b์์ ์กด์ฌํ๋ ๋ฌธ์์ด s์ ๋ชจ๋ ์์ด์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ๋ผ. ๊ฐ ์์ด์ ์์น๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํด์ผ ๊ฒ ๋ค๊ณ ์ ๊ทผํ๋ค๋ณด๋ฉด,
๋ฌธ์์ด s์ ๋ชจ๋ ์์ด -> O(s!)
๊ฐ ์์ด์ ๋ฌธ์์ด b ์์์ ์ฐพ๋๋ค -> O(b)
๊ฒฐ๊ตญ -> O(s!*b)
์์ ์ ํจ๊ป ์ง๊ด์ ์ผ๋ก ๋ต์ ๋ด๋ ค๊ณ ์ ๊ทผํด๋ณด๋ฉด,
s: abbc
b: cbabadcbbabbcbabaabccbabc
b๋ฅผ ์์์๋ถํฐ 4๊ธ์์ฉ ๋์ด์ ์ฐจ๋ก๋ก ์ดํด๋ณธ๋ค. ๊ฐ ๊ธ์๋ฅผ s์์ ํ๋์ฉ ๋ฝ์์ฌ ์ ์๋ค๋ฉด ์์ด์ ์ฐพ์ ๊ฒ์ด๋ค. -> O(b*s^2)
๋ฌธ์ ์ ์ ํฉํ๊ณ ํฌ๊ธฐ๊ฐ ํฌ๋ฉฐ ๊ตฌ์ฒด์ ์ธ ์์ ๋ฅผ ๋ฐํ์ผ๋ก ์ง๊ด์ ์ผ๋ก, ์์ผ๋ก, ๋จธ๋ฆฌ๋ก ๋ฌธ์ ์ ๋ต์ ์ง์ ๋ด๋ณธ๋ค.
๊ทธ ์ง๊ด์ ์ธ ํ์ด๊ณผ์ ์ ์ญ์ผ๋ก ์ด์ฉํด ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณ. ๋๋ ๋ชจ๋ฅด๊ฒ ์ง๊ด์ผ๋ก ํํ๋ '์ต์ ํ'๋ฅผ ์์๋ธ๋ค.
#3. ๋จ์ํ, ์ผ๋ฐํํ๋ผ
๋ฌธ์ ์ ์ ์ฝ์กฐ๊ฑด์ ๋จ์ํํ๊ฑฐ๋ ๋ณํ์ํจ ํํ๋ก ํด๊ฒฐํ ํ์, ๋ณต์กํ ํํ๋ก ๋ค๋ฌ์ด ๊ฐ๋ค.
์์ : ๋์ฌ ๋ ธํธ(ransom note)๋ ์ก์ง์์ ์ค๋ฆฐ ๋จ์ด๋ฅผ ์ด์ฉํด์ ๋ง๋ค์ด ๋ธ ์๋ก์ด ๋ฌธ์ฅ์ ์๋ฏธํ๋ค. ์ก์ง(๋ฌธ์์ด)๊ฐ ์ฃผ์ด์ก์ ๋, ๊ทธ ์ก์ง์์ ๋ฌธ์์ด๋ก ํํ ํน์ ๋์ฌ ๋ ธํธ๋ฅผ ๋ง๋ค ์ ์๋์ง ์ด๋ป๊ฒ ํ์ธํ ๊น?
'์ค๋ฆฐ ๋จ์ด'๋ฅผ '์ค๋ฆฐ ๊ธ์'๋ก ๋จ์ํ ํด๋ณธ๋ค.
๊ทธ๋ฌ๋ฉด ๋ฐฐ์ด์ ์ฌ์ฉํด ํน์ ๋์ฌ ๋
ธํธ์ ๋ํ๋ ๊ธ์๋ค์ ๊ฐ ๊ฐ์๋ฅผ ํ์
ํ๊ณ , ์ก์ง์ ๊ธ์๋ฅผ ์ํํ๋ฉด์ ์ด ๊ฐ์๋ค์ ๋ค ์์งํ ์ ์๋์ง ํ์ธํ๋ฉด ๋๋ค.
๊ฒฐ๊ตญ ๋จ์ด๋ก ์ผ๋ฐํ ํ๋ฉด, ํด์ํ
์ด๋ธ์ ์ฌ์ฉํด ๊ฐ ๋จ์ด์ ๊ฐ์๋ฅผ ํ์
ํ๊ณ , ์ก์ง์ ๋จ์ด๋ฅผ ์ํํ๋ฉด์ ์ด ๊ฐ์๋ค์ ๋ค ์์งํ ์ ์๋์ง ํ์ธํ๋ฉด ๋๋ค.
#4. base case๋ก๋ถํฐ ํ์ฅํ๊ธฐ
n=1 ๊ณผ ๊ฐ์ base case์ ๋ํ ๋ฌธ์ ๋ฅผ ํ๊ณ , ๊ฑฐ๊ธฐ์ ํด๋ฒ์ ํ์ฅํด ๋๊ฐ๋ค.
์์ : ๋ฌธ์์ด์ ๋ชจ๋ ์์ด์ ๊ณ์ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ๋ผ. ๋ชจ๋ ๋ฌธ์๋ ๋ฌธ์์ด ๋ด์์ ๊ณ ์ ํ๊ฒ ๋ฑ์ฅํ๋ค.
์ ๋ ฅ ๋ฌธ์์ด๋ก abcdefg ๊ฐ ์ฃผ์ด์ก๋ค๊ณ ํ๋ฉด,
case "a" -> {"a"}
case "ab" -> {"ab", "ba"}
case "abc" -> ?
P("abc") ๋ P("ab")์์ "c"๋ฅผ ์ฌ์ด์ฌ์ด์ ๋ผ์๋ฃ์ผ๋ฉด ์ป์ ์ ์๋ค. ์ด๋ฐ ์์ผ๋ก ์ฌ๊ท ํธ์ถ์ ๋ง๋ค ์ ์๋ค.
์ด๋ ๋ฏ base case๋ก ๋ถํฐ์ ํ์ฅ ์๊ณ ๋ฆฌ์ฆ์ ์์ฐ์ค๋ฝ๊ฒ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
#5. ์๋ฃ๊ตฌ์กฐ ํ๋์ฉ ๋์
ํด๋ณด๊ธฐ
๋จ์ํ๊ฒ ์ผ๋ จ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฐจ๋ก์ฐจ๋ก ์ดํด๋ณด๋ฉด์ ํ๋์ฉ ์ ์ฉํด ๋ณด๊ธฐ. ๋์ ๋ถํ์ง๋ง ์๊ทผ ์์ฃผ ํตํ๋ค.
์์ : ์์์ ์ซ์๋ฅผ ๋ง๋ค์ด ๋ธ ๋ค ํ์ฅ ๊ฐ๋ฅํ ๋ฐฐ์ด์ ์ฐจ๋ก๋ก ์ ์ฅํ๋ค. ์๋ก์ด ์ ๋ ฅ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์ค๊ฐ๊ฐ(median)์ ๊ตฌํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๋๊ฐ?
์ฐ๊ฒฐ๋ฆฌ์คํธ -> ์ ๋ ฌ๊ณผ ๋ฐ๋ก ์ ๊ทผ์ ์ทจ์ฝ. ์๋๋ฏ
๋ฐฐ์ด -> ์ด๋ฏธ ์ฃผ์ด์ ธ ์๋ค. ๋ฐฐ์ด์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ง? ๋น์ฉ์ด ์๋นํ ๋ฏ
์ด์ง ํธ๋ฆฌ -> ์์๋ฅผ ์ ์งํ๋๋ฐ ์ฅ์ . ํ์ง๋ง ์ค๊ฐ๊ฐ์ ์ฝ๊ฒ ์ป๊ธฐ ์ํด์ ํญ์ ํธ๋ฆฌ์ ๊ท ํ์ ์ ์งํด์ผํ ๋ฏ. ๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์๊ฐ ์ง์์ด๋ฉด ์ค๊ฐ๊ฐ์ ๊ฐ์ด๋ฐ์ ๋ ์์์ ํ๊ท . ์ด๊ฒ๋ ์ ๊ฒฝ์ฐ์ผ๋ฏ
ํ -> ์ต๋๊ฐ ์ต์๊ฐ์ ์ ์งํ๋ ๋ฐ ์ต์ . ์ต์-ํ ๊ณผ ์ต๋-ํ์ ๋์์ ์ด์ํ๋ค๊ณ ํ๋ฉด, ์์๋ค์ ๋ ๋ถ๋ฅ๋ก ๋๋ ์ ํฐ ์ชฝ์ ์ต์-ํ์ ์์ ์ชฝ์ ์ต๋-ํ์ ๋ฃ์ด ์ค๊ฐ ๊ฐ ํ๋ณด์๋ค์ ๊ฐ ํ์ ๋ฃจํธ๋ก ๊ด๋ฆฌํ ์ ์์ ๋ฏ. ํ๋ค์ ์์ ๊ฐ์์ ๊ท ํ๋ง ์ ๋ง์ถ๋ฉด ๋ฑ์ผ ๋ฏ.
[๊ฐ๋ฅํ ์ต์ ์ ์ํ ์๊ฐ]
BCR : Best Conceivable(์๊ฐํด๋ณผ ์ ์๋) Runtime
์ด๋ค ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ, ์์ํ ์ ์๋ ๋ชจ๋ ํด๋ฒ ์ค์ ์ํ ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒ.
์ฃผ์ด์ง ๋ฌธ์ ์ ๋ํด ์ด๋ค ์๊ณ ๋ฆฌ์ฆ๋ ์ด ๋ณด๋ค๋ ๋น ๋ฅผ ์ ์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ ๊ฒ.
e.g. ๊ฐ๊ฐ ๊ธธ์ด๊ฐ A, B ์ธ ๋ฐฐ์ด์ด ์๋ค๊ณ ํ์ ๋ ๋ ๋ฐฐ์ด์ ๊ณตํต์ผ๋ก ๋ค์ด์๋ ์์๋ฅผ ์ธ๋ ๊ฒฝ์ฐ ์ํ์๊ฐ์ O(A+B) ๋ณด๋ค ๋น ๋ฅผ ์ ์์ ๊ฒ.
Best Conceivable Runtime: ๊ฐ๋ฅํ ์ต์ ์ ์ํ ์๊ฐ
-> ๋ชจ๋ ํด๋ฒ ์ค ๊ฐ์ด๋ฐ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ํ ์๊ฐ
Best Case Runtime: '์ต์ ์ ๊ฒฝ์ฐ'์ ์ํ ์๊ฐ
-> ํน์ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋์ํ๋ '๊ฒฝ์ฐ'(case)์ ์ํ ์๊ฐ
๋์ ์ ํ ๋ฌด๊ด.
์ฌ์ฉ๋ฒ์ ๊ดํ ์์ ๋ฅผ ์ดํด๋ณด์.
์์ : ์ ๋ ฌ๋ ๋ฐฐ์ด ๋ ๊ฐ๊ฐ ์ฃผ์ด์ก์ ๋, ๊ณตํต์ผ๋ก ๋ค์ด ์๋ ์์์ ๊ฐ์๋ฅผ ์ฐพ์ผ๋ผ.
A: 13 27 35 40 49 55 59 B: 17 35 39 40 55 58 60
๊ฒฐ๊ตญ O(N)๊น์ง ์ค์ฌ๋ณผ ์ ์๋ค๋ ์ด์ผ๊ธฐ.
O(N*N) ์์ ์ฒซ๋ฒ์งธ N์ ๋์ด์ ์ค์ผ ์ ์์ ๊ฒ ๊ฐ์ผ๋(BCR ํ์ฉ ์ง์ ), ๋๋ฒ์งธ N์ ์ด๋ป๊ฒ ์ค์ผ๊น?
๋๋ฒ์งธ N์ ํ์ํ๋ ๋ถ๋ถ์์ ๋์จ ๊ฒ์ด๋ฏ๋ก, ์ด๋ฅผ ์ด์ง ํ์์ ํตํด logN์ผ๋ก ์ต์ ํ ํด๋ณผ ์ ์์.
๋ ๊ฐ์ ํ ์๋ ์๋๊ฐ? ์ ๋ ฌ๋์ด ์๋ค ํ๋๋ผ๋ ํ์์ O(logN)๋ณด๋ค ์ค์ผ ์๋ ์๋ค.
ํ์ง๋ง BCR๋ณด๋ค ์ํ์๊ฐ์ด ๋น ๋ฅด๊ฑฐ๋ ๊ฐ์ ๋ชจ๋ ์์
์ ์ ์ฒด ์ํ์๊ฐ์ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์๋๋ค (BCR ํ์ฉ ์ง์ ).
๊ทธ๋์ O(N) ์์ ํ ์ ์๋ ์ฌ์ ์์
์ ๋ฌด์์ด๋ ํด๋์ด๋ ๋๋ค -> ์ฌ์ ์ ํด์ํ
์ด๋ธ์ O(N)์ ๋ง๋ค ์ ์์ -> ํ์ ์์ฒด๋ O(1)์ ๊ฐ๋ฅ.
๊ทธ๋ฌ๋ฉด ์ด ์ํ์๊ฐ์ O(N)์ด ๋ ์ ์๋ค.
๋์ถํ ์๊ณ ๋ฆฌ์ฆ์ ์ํ์๊ฐ์ด BCR์ด ๊ฐ์์ก์ผ๋ ๋ ์ด์ '์ํ์๊ฐ' ์์์ ์ต์ ํ๋ ๋ (BCR ํ์ฉ ์ง์ ).
'๊ณต๊ฐ ๋ณต์ก๋' ๋ฅผ ์ต์ ํ ํด๋ณด์. O(N)๋ณด๋ค ๊ณต๊ฐ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๋ ค๋ฉด ํด์ํ
์ด๋ธ์ ํฌ๊ธฐํด์ผ ํจ. -> ๋ค์ ์ด์งํ์์ผ๋ก.
์ด ์ํ์์ ๋ค์ ํ์ ์๊ฐ์ ์ต์ ํ ํด๋ณด์.
๋๋ค "์ ๋ ฌ๋ ๋ฐฐ์ด"์ด๋ผ๋ ํฐ ํํธ๊ฐ ์๋ค.
A๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์์๋ถํฐ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธํ๋ฉฐ B๋ฐฐ์ด์ ์์๋ฅผ ์ฐจ๋ก๋ก ์ดํผ๊ฒ ๋ ํ
๋ฐ,
A๋ฐฐ์ด์ n๋ฒ์งธ ์์๋ฅผ B๋ฐฐ์ด์ ์ด๋ค ์์น์์ ์ฐพ์๋ค๋ฉด A๋ฐฐ์ด์ n+1๋ฒ์งธ ์์๋ ๊ทธ ์์น์ ๋ค ๋ถํฐ ํ์ํ๋ฉด ๋๋ค. ์ ์ฒด์ ์ผ๋ก๋ ๋ ๋ฐฐ์ด์ ๋ชจ๋ ์์ ๊ฐ์์ธ 2n๊ฐ๋ฅผ ํ๋์ฉ ๋ฐฉ๋ฌธํด ๋ณด๋ฉด ๋๋ผ ์ ์๋ค.
์ฆ O(N)์ ํ์์ ํ ์ ์๋ ์ํฉ์ด๋ค.
์ํ์๊ฐ์ด BCR๊ณผ ๊ฐ์์ง๊ณ ๊ณต๊ฐ ๋ณต์ก๋๊ฐ O(1) ์ด ๋์๋ค๋ฉด, big-O ์๊ฐ๊ณผ ๊ณต๊ฐ์ ๋ ์ด์ ์ต์ ํ ํ ์ ์๋ค (BCR ํ์ฉ ์ง์ ).
[์ค๋ต์ ๋ํ ๋์ฒ๋ฒ]
๋ค ๋ง์ถ ํ์๋ ์ ํ ์๋ค. ๋ง์๋ ํ๋ ธ๋๋ก ํ๊ฐํ์ง ์๋๋ค.
ํ๊ฐ ๊ธฐ์ค์,
๊ทธ๋ฆฌ๊ณ ์๋ํ๊ฐ์ด๋ค. ์ ์๊ฐ ๊ตฌ๊ธ์์ ์์ฒ ๋ช ์ ์ฌ์ฌํ๋ฉด์ ์๋ฌด '๊ฒฐ์ ' ์์ด ๋ฉด์ ์ ๋ง์น ์ฌ๋์ ๋ฑ ํ๋ช ๋ดค๋ค.
[์๊ณ ์๋ ๋ฌธ์ ๊ฐ ๋ฉด์ ์ ๋์์ ๋]
์ด์ค์ง๊ณ ํ๋ผ. ์ด์ ๋,
[๋ฉด์ ์ฉ ์ธ์ด]
[์ข์ ์ฝ๋]
[ํฌ๊ธฐํ์ง ๋ง ๊ฒ]
๊น๋ค๋ก์ด ๋ฌธ์ ์ ๋น๋นํ ๋ง์๊ธฐ.
์ถ๊ฐ '์ ์'๋ฅผ ๋ฐ๊ธฐ ์ํด ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ์ฆ๊ธฐ๋ฉฐ ํธ๋ ๋ชจ์ต์ ๋ณด์ฌ๋ผ.
[์ ์ฌ ๊ฒฐ์ ]
[์ ์ฌ๋ฅผ ๊ณ ๋ฏผํ ๋]
[์ฐ๋ด ํ์]
[์ ์ฌ ํ]
๋ฐฐ์ด๊ณผ ๋ฌธ์์ด์ ๊ดํ ๋ฌธ์ ๋ ์๋ก ๋์ฒด ๊ฐ๋ฅ.
1.1_ ascii ๋ฉด, ๊ฐ๋ฅํ ๋ฌธ์์ ์ข ๋ฅ๊ฐ ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์, ๊ทธ ์ข ๋ฅ์ ๊ฐ์๋งํผ ๋ฏธ๋ฆฌ ๋ฐฐ์ด์ ๋ง๋ค์ด๋๊ณ , ๋ฌธ์์ด์ ๋ฌธ์๋ค์ ํ๋์ฉ ๋ณด๋ฉด์ ๊ทธ ์ข ๋ฅ์ ํด๋นํ๋ ์ธ๋ฑ์ค์ ํ์๋ฅผ ํด๋๋ฉด์ ์ฒดํฌํ๋ฉด ์ค๋ณต ํ์ธ์ด ๊ฐ๋ฅ -> O(n). ๋ฐฐ์ด ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด, ๋ชจ๋ ์์ ๋ค ๊ฒ์ฌํ๊ฑฐ๋(n^2) ์ ๋ ฌ์ ํด์ ์ธ์ ํ ๋ฌธ์๋ง ๋น๊ตํ๋ค(nlogn).
1.2 ๊ธธ์ด๊ฐ ๊ฐ์์ผ ํ๊ณ , ๋ ๋ฌธ์์ด์ '๋ฌธ์ ๊ตฌ์ฑ'์ด ์ ํํ ์ผ์นํ๋์ง ํ๋จํ๋ฉด ๋จ. counter ๋ฐฐ์ด์ ๋ฌธ์ ์ข ๋ฅ ํฌ๊ธฐ๋งํผ ํ ๋นํด ๋๊ณ , ์ฒซ๋ฒ์งธ ๋ฌธ์์ด์ ๋ฌธ์ ์ข ๋ฅ์ ๊ฐ์๋ฅผ ์ผ ํ, ๋๋ฒ์งธ ๋ฌธ์์ด์ ํ์ธํ ๋ ์ด ๊ฐ์๋ค์ ์ง์๋๊ฐ๋ฉด์ ํ์ธ.
1.3 ๋ฌธ์์ด์ ์ง์ ์กฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํ ๋, "๋ฌธ์์ด์ ๋ค์์๋ถํฐ ๊ฑฐ๊พธ๋ก ํธ์ง" ํ๋ ํจํด์ด ์์ฃผ ์ฐ์.
์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ฌธ์์ด์ ๋๊ณ ์ง์ ํธ์ง์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์์์๋ถํฐ ํธ์ง์ ํ๋ค๊ฐ ์์ง ํ์ฉํ์ง ๋ชปํ ๊ธฐ์กด ๋ฌธ์๋ฅผ ๋ฎ์ด์ธ ์ผ๋ ค๊ฐ ์์.
๊ทธ๋์ ํธ์ง์ ํ์ํ ์ฌ์ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๊ณ , ๊ธฐ์กด ๋ฌธ์์ด์ ๊ธธ์ด์ ๊ทธ ์ฌ์ ๊ณต๊ฐ ๋งํผ์ ๋ํ ์ด ๊ณต๊ฐ์ ํ๋ณด ํ ๋ค์์๋ถํฐ ํธ์ง์ ์์.
1.4 ์ญ์๋ ๋ฌธ์์ ์ข ๋ฅ๊ฐ ์ ํ๋์ด ์์ผ๋ฏ๋ก ์ข ๋ฅ๋ณ๋ก ๊ฐ์๋ฅผ ์ธ์ ๊ฐ ์ข ๋ฅ์ ๊ฐ์๋ค์ด ์ ๋ถ ์ง์์ด๊ฑฐ๋, ํ๋๋ง 1๊ฐ ์ด๋ฉด ๋๋ค. ๊ณต๊ฐ ํจ์จ์ ์ผ๋ก, ๋นํธ ๋ฒกํฐ๋ฅผ ์ด์ฉํด์ ํด๋น ์ข ๋ฅ๊ฐ ๋ฐ๊ฒฌ๋ ๋ ํ ๊ธํ๋ ์์ผ๋ก ๊ธฐ๋กํด๋์ด๋ ๋๋ค.
์ด๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ ํ๊ธฐ ์ํด ๋นํธ ๋ฒกํฐ(์ซ์)๊ฐ ์์ 0 ์ด๊ฑฐ๋, ํ๋์ ๋นํธ๋ง 1์ธ ์ํฉ์ ๊ฒ์ฌํด์ผ ํ๋ค. ํ์์ ๊ฒฝ์ฐ, ์ซ์์์ 1(2^0) ์ ๋บ ๊ฐ๊ณผ ๊ธฐ์กด ์ซ์๋ฅผ AND ์ฐ์ฐํ์ ๋ 0์ด ๋์จ๋ค๋ฉด, ํด๋น ์ซ์๋ ์ ํํ ํ๋์ ๋นํธ๋ง 1์ด์๋ค๋ ์ฌ์ค์ ์ ์ ์๋ค.
ex)
00010000 - 1 = 00001111
00101000 - 1 = 00100111
1.5 ๋ ๋ฌธ์์ด์ ๋ํด ํฌ์ธํฐ๋ฅผ ๋์์ ์ด๋ํ๋ฉฐ ์กฐ๊ฑด์ ๋ถํฉํ๋์ง ํ๋จ
1.6 ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ผ๋, ๋ ๋ฌธ์์ด์ ๋ชจ๋ ์ฝ์ด๋ค์ฌ ์๋ก์ด ๋ฌธ์์ด์ ๋ณต์ฌํด์ผ ํ๋ค. ๊ณต๊ฐ ํจ์จ์ฑ์ ์ํด StringBuilder๋ฅผ ์ ๊ทน ์ฌ์ฉํด์ผ ํ๋ค.(๊ฐ๋ณ ๊ธธ์ด ๋ฐฐ์ด๋ก ๋์)
1.8 ์ด๋ค ํ๋ ฌ์ ๋ํด์, ํน์ ํ/์ด์ ๋ชจ๋ ์ ์ฉํ๋ ์์ฑ์ ํ๋ ฌ์ ์ฒซ๋ฒ์งธ ํ/์ด์ ์์ฑํด ๋๋ฉด ๊ณต๊ฐํจ์จ์ O(1)๋ก ๊ฐ์ ธ๊ฐ ์ ์๋ค.
์ฐจ๋ก๋ก ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ํํํด์ฃผ๋ ์๋ฃ๊ตฌ์กฐ
๋จ๋ฐฉํฅ ๋๋ ์๋ฐฉํฅ
๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ํน์ ์์(์ธ๋ฑ์ค)๋ฅผ ์์ ์๊ฐ์ ์ ๊ทผ ํ ์ ์์.
์์์ ์์ ์์๋ฅผ ์ถ๊ฐ/์ญ์ ํ๋ ์ฐ์ฐ์ ์์ ์๊ฐ์ ํ ์ ์์.
(ํน์ ์์์ ์ฃผ์๋ฅผ ์๊ณ ์๋ค๋ฉด ๊ทธ๊ณณ์ ์ถ๊ฐ/์ญ์ ๋ํ ์์ ์๊ฐ์ ํ ์ ์์)
๊ฐ ๋ ธ๋ ์์๋ฅผ ๊ด๋ฆฌํ๋ ๋ ํฐ ํด๋์ค(LinkedList ํด๋์ค)๊ฐ ์๋ค๋ฉด, ๊ฒฐ๊ตญ head๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋์ ์ ๊ทผํ๋ ๊ฒ์ด ๊ณง ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ ๊ทผํ๋ ๊ฒ์ด ๋จ. -> head๊ฐ ๋ณ๊ฒฝ๋ ๋, ์ด ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ ๊ทผํ๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ head ์ ๋ณด๊ฐ ๋๊ธฐํ ๋์ง ์๋ ๊ฒฝ์ฐ ์๊น.
Node ํด๋์ค๋ฅผ ํฌํจํ๋ LinkedList ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ํํ ๋ ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ๋์์ ์ฌ์ฉํ๋๋ก ํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ.
Runner
ํฌ์ธํฐ๊ฐ Current
ํฌ์ธํฐ๋ณด๋ค ์์๋๋ก ํ๋ฉด์ ์ํํ๋ ๋ฐฉ๋ฒ.
์๋ฅผ ๋ค์ด, a1->a2->a3->a4->a5->b1->b2->b3->b4->b5 ๊ฐ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ์์ ๋,
a1->b1->a2->b2->...->an->bn ์ ๊ฐ์ด ์ฌ์ ๋ ฌ ํ๊ณ ์ถ๋ค๊ณ ํ์.
Current
ํฌ์ธํฐ๋ ํ ์นธ์ฉ ์งํํ๊ณ , Runner
ํฌ์ธํฐ๋ ๋ ์นธ์ฉ ์งํํ๋ฉด, Runner
๊ฐ ๋์ ๋๋ฌํ์ ๋ Current
๋ ๊ฐ์ด๋ฐ ์ง์ ์ ์๊ฒ ๋๋ค. ์ด๋ Runner
๋ฅผ ๋ค์ ๋งจ ์์ผ๋ก ์ฎ๊ฒจ์ ํ์นธ์ฉ ์งํํ๋๋ก ํ๋ Current
๊ฐ ์์ผ๋ก ๊ฐ๋ฆฌํค๊ฒ ๋ ์์๋ค์ Runner
์ ๋ค์ ์๋ฆฌ์ ๋ฐ์ด๋ฃ์ผ๋ฉด ๋๋ค.
์ฌ๊ท ํธ์ถ์ ๋จ๋ฐฉํฅ ํ๋ฆ์์ ๋ค๋ก ์ ๋ณด๋ฅผ ์ ๋ฌํ ์ ์๋ ๋ฐฉ๋ฒ.
์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ด๋ จ ๋ฌธ์ ๊ฐ์ด๋ฐ ์๋น์๋ ์ฌ๊ท ํธ์ถ์ ์์กดํจ.
2.2 ๊ฒฐ๋ก ์
Runner
ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด์Current
ํฌ์ธํฐ๊ฐ ํญ์ ์์ ๋ณด๋ค k๊ฐ ๋ค์ ์๋๋ก ์ํํ๋ฉด ๋๋ค.
brute-force๋ก ์๊ฐํด๋ณด๋ฉด ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋๊น์ง ์ํํด์ ์ด ๊ธธ์ด๋ฅผ ๊ตฌํ๊ณ , ๋ค์์ k๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํด(n-k ๋ฒ์งธ) ํด๋น ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๋ฉด ๋๋ค. ์ฐ๊ฒฐ๋ฆฌ์คํธ์์ ํน์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ๋ค์ ์์ํด์ผํ๊ธฐ ๋๋ฌธ์, ์ด ๊ธธ์ด ๊ณ์ฐ ์์Current
ํฌ์ธํฐ๋ฅผ ๋ค๋ฐ๋ฅด๊ฒ ํด๋์ด์ ๋ฐ๋ก ์ ๊ทผํ ์ ์๊ฒ ํ๋ ๋ฐฉ์.
2.3 ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ด๋ฏ๋ก, ํ์ฌ ๋ ธ๋์ ๋ค์ ์๋ ๋ ธ๋๋ค์ ์ ๋ณด๋ง ์กฐํํ๊ณ ์์ ํ ์ ์๋ค. ๊ทธ๋์ ์ง๊ธ ์ญ์ ํ๋ ค๋ ๋ ธ๋๊ฐ ๋ง์น ๊ทธ ๋ค์๋ ธ๋์ฒ๋ผ ์กด์ฌํ๋๋ก ์์ ํด๋ณผ ์ ์๋ค. ์ญ์ ํ๋ ค๋ ๋ ธ๋์ data๋ฅผ ๊ทธ ๋ค์ node์ data๋ก, next ์ ๋ณด๋ฅผ ๊ทธ ๋ค์ node์ next ์ ๋ณด๋ก ์์ ํ๋ฉด ๋๋ค.
2.4 ํฌ์ธํฐ ๋๊ฐ๋ฅผ ์ฌ์ฉํด์ ํ๋(p1)๋ ์์ ์ด ์ง๋์จ ๊ณณ์๋ ๋ฌด์กฐ๊ฑด x๋ณด๋ค ์์ ์์๊ฐ ์๋ ๊ฒ์ ๋ณด์ฅํ๋๋ก ํ๊ณ , ๋๋จธ์ง ํ๋(p2)๋ x๋ณด๋ค ์์ ์์๋ค์ ์ฐพ์ผ๋ฌ ๋จผ์ ๋๊ฐ์ ์ฐพ์๋ณด๊ฒ ํ๋๋ก ํ๋ฉด ๋๋ค. p1์ด x๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์๋ฅผ ๋ง๋ฌ์ ๋, p2๋ ์์ ์ด ๋ง์ง๋ง์ผ๋ก ์ฐพ์๋ ์ง์ ์์๋ถํฐ ์์ํด์ x๋ณด๋ค ์์ ์์๊ฐ ์๋์ง ํ์ธํ๊ณ , ๋ฐ๊ฒฌํ๋ฉด p1 ์๋ฆฌ์ ์์์ ๊ต์ฒดํ๋ค. p2๋ ํญ์ p1๊ณผ ๊ฐ์ ์์น ํน์ ๋ ์งํํ ์์น์ ์์ด์ผ ํ๋ค. p2๊ฐ ๋ฆฌ์คํธ์ ๋์ ๋๋ฌํ๋ฉด ์ข ๋ฃํ๋ค.
์๋๋ฉด ์๋ก์ด ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค. ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง์ธ๋ฐ, ์ด๋ค node๋ฅผ ์ฌ๋ฐฐ์น ํ๊ณ ์ ํ ๊ฒฝ์ฐ, node.next๋ฅผ ๋ฏธ๋ฆฌ ๊บผ๋ด๋๊ณ node.next๊ฐ ์ํ๋ ๊ณณ์ ๊ฐ๋ฆฌํค๋๋ก ์์ ํ๋ฉด ๋๋ค.
2.6 ์ฌ๊ท ํธ์ถ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ Stack์ ํ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ํก์ฌํ๋ค.
์ฌ๊ท ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ด 2๊ฐ ์ด์์ด์ด๋ ๋ฌด๋ฐฉํ๋ค. ํ์ด์ฌ์ด ์๋๋ผ๋ฉด ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ํ์ฉํ๋ค.
2.8 Tortoise & Hare Algorithm
1) T๊ฐ ํ ์นธ์ฉ, H๊ฐ ๋ ์นธ์ฉ ์์ง์ด๋๋ก ํ์ ๋, ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋ฃจํ๊ฐ ์๋ค๋ฉด T์ H๋ ๊ฒฐ๊ตญ ๋ง๋๊ฒ ๋๋ค.
2) ํ ํฌ์ธํฐ๋ฅผ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์์์ , ๋ค๋ฅธ ํฌ์ธํฐ๋ฅผ ๋์ด ๋ง๋ ์ง์ ์ ๋๊ณ ๋ ๋ชจ๋๋ฅผ ํ ์นธ์ฉ ์งํ์ํค๋ฉด, ๋ฃจํ์ ์์ ์ง์ ์์ ๋ง๋๊ฒ ๋๋ค.๊ฐ๋จํ ์ฆ๋ช 1 : ๋ฃจํ๊ฐ ์๋ค๋ฉด, H๋ ๊ฒฐ๊ตญ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋์ ๋๋ฌํ ๊ฒ์ด๋ค. ๋ฃจํ๊ฐ ์๋ค๋ฉด, H๊ฐ T๋ณด๋ค ๋ฌด์กฐ๊ฑด ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ T๊ฐ ๋ฃจํ์ ์์์ ๋๋ฌ ํ์ ๋ H๋ ๋ฃจํ์ ์ด๋๊ฐ์ ์์นํด ์์ ๊ฒ์ด๋ค. ๋ฃจํ๋ ๊ฒฐ๊ตญ '์'์ด๊ธฐ ๋๋ฌธ์ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ์์ง์ธ๋ค๋ฉด ์ด๋ฏธ ๋ฃจํ ์ด๋๊ฐ์ ์๋ H๊ฐ ๋ฃจํ ์์์ ์๋ T๋ฅผ ๋ค์ซ๋ ๊ด์ ์ผ๋ก ๋ฐ๋ผ๋ณผ ์ ์๋ค. ์ด๋, T๋ ํ ๋ฒ์ ํ ์นธ์ฉ H๋ ํ ๋ฒ์ ๋ ์นธ์ฉ ์์ง์ด๋ฏ๋ก, ๊ฒฐ๊ตญ H๊ฐ T์ ํ ๋ฒ์ ํ ์นธ์ฉ ๊ฐ๊น์ ์ง๋ ๊ผด์ด ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋์ ๋ฌด์กฐ๊ฑด ๋ง๋ ์ ๋ฐ์ ์๋ค.
๊ฐ๋จํ ์ฆ๋ช 2: T๊ฐ 1์นธ ๊ฐ๋ H๋ 2์นธ ๊ฐ๋ค. T๊ฐ k์นธ ๊ฐ๋ H๋ 2k์นธ ๊ฐ๋ค. T๊ฐ k๋งํผ ์์ง์ฌ ๋ฃจํ ์์์ ์ ๋์ฐฉํ๋ค๋ฉด ๊ทธ๋์ H๋ 2k๋งํผ ์์ง์์ ํ ๋ฐ, H๋ ์ด๋ฏธ ๋ฃจํ ์์ ๋๊ณ ์์ ๊ฒ์ด๋ค. H๊ฐ ๋ฃจํ ์์์ ์ผ๋ก๋ถํฐ ์์ง์ธ ๊ฑฐ๋ฆฌ๋
2k-k=k
์ด๋ค. ์ด๋ k๋ ๋ฃจํ์ ์ด ๊ธธ์ด๋ณด๋ค ํด ์ ์์ผ๋ฏ๋ก ์ข ๋ ์ ํํ๊ฒ H๋ ๋ฃจํ ์์์ ์ผ๋ก๋ถํฐk%LOOP_SIZE = K
๋งํผ ์งํํด ์๋ค. ์ด๋ฐ ์ํฉ์์ ๋ฃจํ ์์์ ์ ์๋ T์ ๋ํด H๊ฐLOOP_SIZE-K
๋งํผ ๋ค์ณ์ ธ ์๋ค๋ ๊ด์ ์ผ๋ก ๋ณผ ์ ์๊ณ (๋ฃจํ ์์์์ K๋งํผ ๋ค์ณ์ ธ ์๋ ๊ฒ๊ณผ ๋ค๋ฅธ ํํ. ๊ทธ๊ฑด ๊ทธ๋ฅK
๋งํผ ๋ค์ณ์ ธ ์๋ ๊ฒ), T๋ H์๊ฒ ํ ๋ฒ์ ํ ์นธ์ฉ ๋ฐ๋ผ์กํ๋ฏ๋กLOOP_SIZE-K
๋จ์์๊ฐ ๋งํผ ์์ง์ด๋ฉด ๋์ ๋ง๋๋ค. ๋์ด ๋ง๋๋ ์ง์ ์ T์ ์์ง์์ ํตํด ๊ณ์ฐํด ๋ณผ ์ ์๋๋ฐ, T๋ ๋ฃจํ์ ์์์ ์์ ์ถ๋ฐํด ํ ๋ฒ์ ํ ์นธ์ฉ ์์ง์ด๋ฏ๋ก,LOOP_SIZE-K
๋จ์ ์๊ฐ ์ดํ์๋ ๋ฃจํ ์์์ง์ ์ผ๋ก๋ถํฐLOOP_SIZE-K
์งํํ ๊ณณ์ ์์ ๊ฒ. ๊ทธ๊ณณ์ ๋ฌ๋ฆฌ ๋งํ๋ฉด ๋ฃจํ์ ์์์ ์ผ๋ก ๋ถํฐK
๋งํผ ๋ค์ณ์ ธ ์๋ ๊ณณ์ด ๋๊ณ ,K
๋งํผ ๋ค์ณ์ ธ ์๋ ๊ฒ์k
๋งํผ ๋ค์ณ์ ธ ์๋ ๊ฒ๊ณผ ๊ฐ๋ค(๋ฑ ๊ธ๋ฑ ๊ธ ๋๋ฉด ์ด์ฐจํผ ๊ฐ์ ๊ณณ).
์คํ : Last In First Out - ๊ฐ์ฅ ์ต์ ์ ์ ๋ณด๋ฅผ ๋ฐํ
ํ : First In First Out - ๋ค์ด์จ ์์๋๋ก ์ ๋ณด๋ฅผ ๋ฐํ
3.2 ์คํ์ ๊ฐ ์์๋ฅผ ๋ ธ๋๋ก ๊ด๋ฆฌํ๋ฉด value ์ธ์ meta data ๋ ์ ์ฅํด ๋ ์ ์๋ค. ๋จ, ์ด ๊ฒฝ์ฐ์ O(n)๋งํผ์ ์ถ๊ฐ ๊ณต๊ฐ์ด ํ์ํ๊ฒ ๋๋ค. ๊ณต๊ฐ ๋ญ๋น๊ฐ ๋๋ฌด ์ฌํ ๊ฒฝ์ฐ meta data๊ฐ ์คํ ์ ์ฒด์ ์ํ์ ๊ด๋ จํ ๊ฒ์ด๋ผ๋ฉด, ๋ ๋ค๋ฅธ ์คํ์ ์ถ๊ฐ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ์ ์๋ค.
3.4 3.5 ์คํ์ ์์๋ค์ ํ๋์ฉ popํด์ ๋ค๋ฅธ ์คํ์ ์ฐจ๋ก๋ก push ํด๋๋ฉด ์๋ ๋ ๊ฐ์ง๊ฐ ๊ฐ๋ฅํ๋ค.
1) push ํด๋ ์คํ์์ ์ฐจ๋ก๋ก pop ์ ํ๋ฉด ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ํ์์ ๊บผ๋ด์ฐ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
2) push ํด๋ ์คํ์ ์์๋ฅผ ๋ค์ ์ฐจ๋ก๋ก popํด์ ์๋ ์คํ์ pushํ๋ฉด, ์๋ ์คํ ๋ฐ์ดํฐ์ ์์๋ฅผ ์ ์งํ ์ ์๋ค.
3.6 ํ๋ฅผ ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํํ ๊ฒฝ์ฐ, ํ์ ์งํ๋ฐฉํฅ์ tail -> head ๋ก ๋์ด tail์ ๋ฃ๊ณ head์์ ๊บผ๋ด์จ์ผ ํ๋ค.
ํ์์ ๊บผ๋ธ๋ค๋ ๊ฒ์ ๋ด ์ด์ ๋ ธ๋์ next๋ฅผ null๋ก ๋ฐ๊พธ๋ฉด์ ๊บผ๋ผ ์์๋ฅผ ์ฐ๊ฒฐ๋ฆฌ์คํธ์์ ์ ์ธํ๋ ๊ฒ์ธ๋ฐ, ํ์ ์งํ๋ฐฉํฅ์ head -> tail ๋ก ๋์ด head์ ๋ฃ๊ณ tail์์ ๊บผ๋ด์ฐ๋ฉด tail์ ์ด์ ๋ ธ๋์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
ํธ๋ฆฌ
ํธ๋ฆฌ/๊ทธ๋ํ ๋ฌธ์ ๋ ๋ณดํต ์ธ๋ถ์ฌํญ๊ณผ ๊ฐ์ ์ด ๋ถ๋ถ๋ช ํ๊ฑฐ๋ ๋ถ์ ํํ ๊ฒฝ์ฐ๊ฐ ๋ง์. ๋ฉด์ ๊ด์๊ฒ ๋ช ํํ๊ฒ ํด์ค ๊ฒ์ ์๊ตฌ.
[์ด์งํธ๋ฆฌ]
binary tree
[์ด์ง ํ์ ํธ๋ฆฌ]
binary search tree
"๋ชจ๋ " ์ผ์ชฝ ์์๋ค <= n < "๋ชจ๋ " ์ค๋ฅธ์ชฝ ์์๋ค
์ ์์ฑ์ ๋ง์กฑํ๋ ์ด์ง ํธ๋ฆฌ.
๋ฐ๋ก ์๋ ์์ ๋ฟ๋ง ์๋๋ผ, ๋ด ๋ฐ์ ์๋ "๋ชจ๋ " ์์๋ค์ ๋ํด์๋ ์ฐธ์ด์ด์ผ ํจ.
๋ชจ๋ ์ด์ง ํธ๋ฆฌ๊ฐ ํญ์ ์ด์ง ํ์ ํธ๋ฆฌ๋ ์๋๋ค. ํท๊ฐ๋ฆฌ๋ฉด ์๋จ
[๊ท ํ vs ๋น๊ท ํ]
[ ์์ (complete) / ์ (full) / ํฌํ(perfect) ]
k
์ผ ๋, ๋
ธ๋์ ๊ฐ์๊ฐ ์ ํํ 2^k - 1
์ธ ํธ๋ฆฌdef go(node):
if node is not None:
go(node.left)
print(node)
go(node.right)
def go(node):
if node is not None:
print(node)
go(node.left)
go(node.right)
def go(node):
if node is not None:
go(node.left)
go(node.right)
print(node)
์ต์ํ๊ณผ ์ต๋ํ์ ์ ๋ ฌ์ ๋ฐฉํฅ๋ง ๋ค๋ฅด๊ณ ๋ณธ์ง์ ๊ฐ์. ์ฌ๊ธฐ์ ์ต์ํ๋ง.
๊ฐ ๋ ธ๋์ ์์๊ฐ ์์'๋ค'์ ์์๋ณด๋ค ์๋ค.
์์ ์ด์ง ํธ๋ฆฌ (complete)
์ฝ์
์ต์๊ฐ ์ถ์ถ
prefix tree. trie.
์ฌ๋ฐ๋ ์๋ฃ๊ตฌ์กฐ.
๋ฉด์ ์์ ๋น์ถ. ๋ณดํต ์๊ณ ๋ฆฌ์ฆ ์ฑ
์์๋ ์ํ.
ALPHABET_SIZE+1
๊ฐ์๊น์ง์ ์์์ ๊ฐ์ง ์ ์์.ALPHABET_SIZE
๊ฐ์๊น์ง)์
๋ ฅ ๋ฌธ์์ด์ด ์ ์ฅ๋ ๋ฌธ์์ด์ '์ ๋์ฌ' ์ธ์ง ํ์ธํ๋ ๋ฐ์ ๋งค์ฐ ์ ๋ฆฌ.
(X๋ฌธ์์ด์ด Y๋ฌธ์์ด์ ์ ๋์ฌ์ธ์ง -> Y๋ฌธ์์ด์ด X๋ฌธ์์ด๋ก ์์ํ๋์ง)
์ ์ฅ๋ ๋ฌธ์์ด๋ค์ด ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ ์์ ์ ์ฅ๋์ด ์๋ค๋ฉด, ์ ๋ ฅ๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ K์ผ๋ O(K) ์๊ฐ์ ์ ๋ ฅ๋ ๋ฌธ์์ด์ด '์ ํจํ ์ ๋์ฌ' ์ธ์ง (์ ์ฅ๋ ๋ฌธ์์ด ์ค ์ ๋ ฅ๋ ๋ฌธ์์ด์ ์ ๋์ฌ๋ก ๊ฐ๋ ๋ฌธ์์ด์ด ์๋์ง) ํ์ธ ๊ฐ๋ฅ.
ํด์ํ ์ด๋ธ์ ์๊ฒฐ๋ ๋จ์ด ๋จ์๋ก ๋์์ํค๊ธฐ ๋๋ฌธ์,
ํด์ํ ์ด๋ธ๋ ํด์ฑ์ ํ ๋ ์ ๋ ฅ ๋ฌธ์์ด์ ํ๊ธ์์ฉ ์ฝ๊ธฐ ๋๋ฌธ์, K์ธ ๋จ์ด๋ฅผ ๊ฒ์ํ๋๋ฐ O(K) ์๊ฐ์ด ๊ฑธ๋ฆผ
[์ธ์ ๋ฆฌ์คํธ / ์ธ์ ํ๋ ฌ]
์ธ์ ๋ฆฌ์คํธ
์ธ์ ํ๋ ฌ
[๊ทธ๋ํ ํ์]
DFS: depth-first search
void search(Node root) {
if (root == null) return;
visit(root);
root.visited = true;
for each (Node n in root.adjacent) {
if (n.visited == false) {
search(n);
}
}
}
BFS: breadth-first search
void search(Node root) {
if (root == null) return;
Queue queue = new Queue();
root.marked = true;
queue.enqueue(root);
while (!queue.isEmpty()) {
Node r = queue.dequeue();
visit(r)
foreach (Node n in r.adjacent) {
if (n.marked == false) {
n.marked = true; // enqueue ํ๋ค๊ณ ๋ฐ๋ก ๋ฐฉ๋ฌธํ์ง ์๊ธฐ ๋๋ฌธ์, ํ์ ์ค๋ณต์ผ๋ก ๋ค์ด๊ฐ์ง ์๋๋ก check ํ enqueue ํ๋ค.
queue.enqueue(n);
}
}
}
}
์๋ฐฉํฅ ํ์: bidirectional search
4.2 ๋ฐฐ์ด์ ์๋ผ์ ์ ๋ฌํ์ง ๋ง๊ณ , ์๋ณธ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ๋ฉด์ ๊ณ์ฐ
4.3 ์ด์งํธ๋ฆฌ์์๋ '์ ์ ์ํ(pre-order)'๊ฐ ๋จ๊ณ๋ณ ์ํ๋ฅผ ๊ฐ๋ฅํ๊ฒํจ
4.5 ์ด์งํธ๋ฆฌ์ ์์ฑ์ "ํ์ฌ ๋ ธ๋์์, ์ผ์ชฝ์ ๋ชจ๋ ๋ ธ๋๊ฐ ํ์ฌ ๋ ธ๋๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๊ณ , ์ค๋ฅธ์ชฝ์ ๋ชจ๋ ๋ ธ๋๊ฐ ํ์ฌ ๋ ธ๋๋ณด๋ค ํฌ๋ค" ์ด๋ค. ์ฆ ์๋ธํธ๋ฆฌ๋ค์ ์ต๋/์ต์ ๋ฒ์๋ก ๊ฒ์ฌ๊ฐ ๊ฐ๋ฅํ๋ค.
4.6 ํ์ฌ ๋ ธ๋๊ฐ,
- ์ค๋ฅธ์ชฝ ์์์ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ์ค๋ฅธ์ชฝ ์์์ ๊ฐ์ฅ ์ข์ธก ๋ ธ๋.
- ๋ถ๋ชจ์ ์ผ์ชฝ ์์์ด์๋ค๋ฉด, ๋ถ๋ชจ.
- ๋ถ๋ชจ์ ์ค๋ฅธ์ชฝ ์์์ด์๋ค๋ฉด, ๋ถ๋ชจ์ ๋ถ๋ชจ๋ค ์ค ๊ทธ๋ค์ ์ผ์ชฝ ์์์ผ๋ก ๊ฐ์ง๋ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๋ ธ๋.
4.7 ์์์ ๋ ฌ (topological sort)
"์ด๋ค ๊ทธ๋ํ์ ๊ฐ์ (a,b)๊ฐ a๋ฅผ ์ํด์ b๊ฐ ๋จผ์ ์ถฉ์กฑ๋์ด์ผ ํ๋ ์กฐ๊ฑด์ ๋ํ๋ผ ๋, ๋ ธ๋๋ฅผ ์ ํ ์์๋๋ก ๋์ดํ๋ ๋ฐฉ๋ฒ"def topological_sort(nodes): stack = [] for node in nodes: if node.state == "BLANK": if not complete_dfs(node, stack): return False return stack[::-1] def complete_dfs(node, stack): if node.state == "PARTIAL": return False # ์ฌ์ดํด ๊ฐ์ง if node.state == "BLANK": node.state = "PARTIAL" for child in node.children: if not complete_dfs(child, stack): return False node.state = "COMPLETE" stack.append(node) return True
^(XOR) ์ฐ์ฐ์ ์ฐ์ฐ์์ ํผ์ฐ์ฐ์์ ๋นํธ๊ฐ '๋ค๋ฅผ ๋' ์ฐธ์ด ๋๋ค.
์ด๋ค ์๋ฅผ ์ผ์ชฝ์ผ๋ก n๋ฒ shift ํ๋ ๊ฒ์ 2^n ์ ๊ณฑํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
~0์ ํ๋ฉด ๋ชจ๋ ๋นํธ๊ฐ 1์ด ๋๋ค.
-1๋ ๋ชจ๋ ๋นํธ๊ฐ 1์ด๋ค.
i ๋ฒ์งธ ๋นํธ๋ง 1์ธ ์์์ 1์ ๋นผ๋ฉด,
์ต์์ ๋นํธ๋ถํฐ i ๋ฒ์งธ ๋นํธ๊น์ง๋ 0์ด ๋๊ณ , i-1 ๋ฒ์งธ ๋นํธ์ ๊ทธ ํ์ ๋นํธ๋ค์ด ์ ๋ถ 1์ด ๋๋ค.
์์๋๋ฉด ์ข์ ํํ์
x ^ 0s = x
x ^ 1s = ~x
x ^ x = 0
๋ณด์(่ฃๆธ)๋ ๋ณด์ถฉ์ ํด์ฃผ๋ ์๋ฅผ ์๋ฏธํ๋ค.
์ด๋ฅผํ ๋ฉด1์ ๋ํ 10์ ๋ณด์๋ 9
,4์ ๋ํ 15์ ๋ณด์๋ 11
์ ๊ฐ๋ ์ด๋ค.1์ ๋ํ 2์ ๋ณด์๋ 1
์ด๋ค.
์๋ฆฟ์๊ฐ 8๊ฐ(8๋นํธ) ์ผ ๊ฒฝ์ฐ ์์ ์ ์ -6์ ์๋์ ๊ฐ์ด 1์ ๋ณด์ ๋ฐฉ์๊ณผ 2์ ๋ณด์ ๋ฐฉ์์ผ๋ก ํํํ ์ ์๋ค.
์๋ฆฌ์๊ฐ 8๊ฐ(8๋นํธ) ์ผ ๊ฒฝ์ฐ, ํํํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ 256๊ฐ์ง ์ด๊ณ , 0์ ํฌํจํ๋ค๋ฉด 0๋ถํฐ 255๊น์ง์ ์ ์๋ฅผ ํํํ ์ ์๋ค.
์์๋ ๋ฌด์์ธ๊ฐ? ๊ทธ ์ ๋๊ฐ(์์)๊ณผ ์๊ธฐ์์ (์์)์ ๋ํ๋ฉด 0 ์ด ๋๋ ์์ด๋ค.
์ฆ ์ด๋ค ์์์ "์ด๋ค ์" ๋ฅผ ๋ํด์ 0์ด ๋์จ๋ค๋ฉด, ๊ทธ "์ด๋ค ์"๋ ์์์ผ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ง๊ธ๊ณผ ๊ฐ์ด ์๋ฆฌ์(8๊ฐ)๊ฐ ์ ํด์ ธ ์๋ค๋ฉด, ์ด๋ค ์์์ "์ด๋ค ์"๋ฅผ ๋ํด์ 256์ด ๋์ด๋ ๋ฌด๋ฐฉํ๋ค. 256์ 9๋ฒ์งธ ์๋ฆฌ๋ง 1์ด๊ณ ๋๋จธ์ง 8๊ฐ ์๋ฆฌ๋ ์ ๋ถ 0์ด๊ธฐ ๋๋ฌธ์, 8๊ฐ์ ์๋ฆฌ์๊ฐ ํํํ ์ ์๋ ๊ฒฝ์ฐ์ ์์์๋ 0์ด๋ผ๊ณ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ์๊น 8๊ฐ์ ์๋ฆฌ์์์ ๋ง๋ค ์ ์๋ ์ต๋์ ์ ์๋ 255๋ผ๊ณ ํ๋ค. 8์๋ฆฌ์์ ๋ง๋ค ์ ์๋ ์ต๋ ์ ์๋ ๋น์ฐํ๊ฒ๋ 8๊ฐ ์๋ฆฌ ๋ชจ๋ 1์ด๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ 1์ ๋ํ๋ฉด 256์ด ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ค ์์์ "์ด๋ค ์"๋ฅผ ๋ํด 255๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉด, "์ด๋ค ์" + 1 ๋ก๋ 256์ ๋ง๋ค ์ ์๊ฒ ๋๋ค.
์ฆ "์ด๋ค ์" + 1 ์ด ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ ์์๊ฐ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ผ๋จ 255๋ฅผ ๋ง๋ค์ด ๋ณด์. 255์์ ์์๋ฅผ ๋นผ๋ฉด "์ด๋ค ์"๋ฅผ ๋ง๋ค ์ ์์ ๊ฒ์ด๋ค.
255 ์ฆ, 8๊ฐ ์๋ฆฌ ๋ชจ๋ 1์ธ ์ด์ง์์์ ์์๋ฅผ ๋นผ๋ฉด ๋๋๋ฐ, ์ด๋ฅผ ์ง์ ํด๋ณด๋ฉด ์๋ ์์์ ๋ชจ๋ ๋นํธ๋ฅผ ๋ฐ์ ์ํจ ๊ฒฐ๊ณผ์ ๊ฐ์์ ์ ์ ์๋ค.
๊ฒฐ๊ตญ ์์์ ๋นํธ๋ฅผ ๋ชจ๋ ๋ฐ์ ์ํค๊ณ , 1์ ๋ํ ๊ฒ์ด "์ด๋ค ์" + 1 ์ฆ ์์๊ฐ ๋๋ค.
์ฌ๊ธฐ์ "์ด๋ค ์" ๊ฐ 1์ ๋ณด์, "์ด๋ค ์" + 1์ด 2์ ๋ณด์๋ผ๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด์ง์๋ ํํ์ด๋ฉด ํ ์๋ฆฌ์ '๋ ๊ฐ์ง'์ ์ซ์๋ง ์ฌ ์ ์์ผ๋ฏ๋ก, '๋ ๊ฐ์ง' ๋ก ํํ๋๋ ์/์ ๋ถํธ๋ฅผ ์ ํํ์ผ๋ก ๋์ ์ฌ์ฉํ๋ค.
๊ตฌ์ฒด์ ์ผ๋ก๋, ๊ฐ์ฅ ์์ ์๋ฆฌ์ 1 / 0์ด ์ / ์์ ํํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฆฌ 1๊ฐ๊ฐ ์ค์์ผ๋ฏ๋ก, ํํ ๊ฐ๋ฅํ ์ ์์ ๋ฒ์๋ ~128 ~ 0 ~ 127 ๋ก ๋ฐ๋๋ค. ๋จ, ํํํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ์ฌ์ ํ ๊ฐ๋ค.
์ฐ์ธก ์ํํธ๋ ์ต์์ ๋นํธ๊ฐ ํญ์ ๋น๊ณต๊ฐ์ด ๋๋๋ฐ ํํ ์ด๊ฒ ๋ถํธ๋นํธ์ด๋ค.
๊ทธ๋์, ์๋์ ๊ฐ์ด ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ๊ฐ๋ฅํ๋ค.
[๋นํธ๊ฐ ํ์ธ] -> ์ผ์ ธ์๋์ง ํ์ธํ๋ ๊ฒ
[๋นํธ๊ฐ ์ฑ์๋ฃ๊ธฐ] -> ํด๋น ๋นํธ 1๋ก ๋ง๋ค๊ธฐ
[๋นํธ๊ฐ ์ญ์ ํ๊ธฐ] -> ํด๋น ๋นํธ(๋ค) 0์ผ๋ก ๋ง๋ค๊ธฐ
[๋นํธ๊ฐ ๋ฐ๊พธ๊ธฐ] -> 0๋๋ 1๋ก ๋ฐ๊พธ๊ธฐ
5.6 ์ด๋ค ์ ์ a์ '1๋นํธ'์ ๊ฐ์๋ฅผ ์ผ๋ค๊ณ ํ์ ๋,
- ํ ์นธ์ฉ ์ค๋ฅธ์ชฝ ์ํํธ ํ๋ฉฐ, ์ตํ์ ๋นํธ๋ฅผ ๊ฒ์ฌ
def check(a): # a๋ ์์๋ผ๊ณ ํ์. ์์์ด๋ฉด ๋ ผ๋ฆฌ ์ํํธ๋ฅผ ์จ์ผํ๋ค. count = 0 while a != 0: count += a & 1 a >> 1 return count
- ์ตํ์ ๋นํธ๋ฅผ ๋ค์ง์ด ๊ฐ๋ฉฐ, a๊ฐ 0์ด ๋๋๋ฐ ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋ ์ง๋ฅผ ๊ณ์ฐ.
๋ค์ ๋งํด, a๊ฐ 0์ด ๋ ๋ ๊น์งa = a & (a - 1)
์ ๋ฐ๋ณต
- ์ตํ์ ๋นํธ๊ฐ 1์ด๋ฉด,
-1
ํ์ ๋ ์ตํ์ ๋นํธ๋ 0์ด ๋๊ณ , ๊ธฐ์กด ๊ฐ๊ณผ&
ํ๋ฉด ๊ธฐ์กด๊ฐ์ ๊ทธ 1์ด ์ฌ๋ผ์ง.- ์ตํ์ ๋นํธ๊ฐ 0์ด๋ฉด,
-1
ํ์ ๋ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ 1์ด 0์ด ๋๊ณ , ๊ทธ ํ์ ๋นํธ๋ค์ ์ ๋ถ 1์ด ๋จ. ๊ทธ๋ฆฌ๊ณ&
ํ๋ฉด ๊ธฐ์กด๊ฐ์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ 1๋ง ์ฌ๋ผ์ง.
์๋ํ๋ฉด, ๊ทธ ํ์ ๋นํธ๋ ์ ๋ถ 0์ด์๊ธฐ ๋๋ฌธ.def check(a) count = 0 while a != 0: a = a & (a - 1) return count
5.7 ํ์ ๋นํธ๋ฅผ ๋ง์คํนํ ์ ์๋ ์๋ฅผ ์ด๋ป๊ฒ ๋ง๋ค๊น?
16์ง์๋ฅผ ์ฌ์ฉํ๋ฉด ๋นํธ๋ฅผ ์๊ฐํํ ๊ฒ ์ฒ๋ผ ์๋ฅผ ๋ง๋ค๊ธฐ ํธํ๋ค.
์๋ฅผ ๋ค์ด,10101010(2)
๋0xAA
์ด๋ค.01010101(2)
๋0x55
์ด๋ค.11111111(2)
๋0xFF
์ด๋ค.
16์ง์์ด๊ธฐ ๋๋ฌธ์, ํ ์๋ฆฌ์์ 4๋นํธ์ฉ ์ฐจ์งํ๊ณ ์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ 4๋นํธ์ ํด๋นํ๋ ์ซ์๋ฅผ ์๋ฆฟ์๋ณ๋ก ์ญ ๋์ดํ๋ฉด ๋๋ค.
์์๊ป๋ผ (brain teasers) ํน์ ํผ์ฆ.
๋
ผ๋์ ์ฌ์ง๊ฐ ๋ง์ง๋ง ์ด์จ๋ ์ถ์ ๋ ์ ์์.
๋ชจ๋ ์์ฐ์๋ ์์์ ๊ณฑ์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
[๊ฐ๋ถ์ฑ]
x๋ฅผ y๋ก ๋๋ ์ ์์ผ๋ ค๋ฉด, y๋ฅผ ์ด๋ฃจ๋ ์์๋ค์ x๋ฅผ ์ด๋ฃจ๋ ์์๋ค์ ๋ถ๋ถ์งํฉ์ด์ด์ผ ํ๋ค.
์ฌ๊ธฐ์ ๋ฅผ ๋ง์กฑํด์ผ ํ๋ค๋ ๋ป.
๊ทธ๋์ ์ต๋๊ณต์ฝ์๋ ๊ฐ ์ง์๋ค์ ์ต์๊ฐ์ผ๋ก ํํ๋ ์ ์๊ณ (ํ์ชฝ์ด๋ผ๋ 0์ด๋ฉด 0์ด ๋ ์ ์์),
์ต์๊ณต๋ฐฐ์๋ ๊ฐ ์ง์๋ค ์ค ํฐ๊ฐ์ ์ทจํ๋ค.
๊ฐ๊ฐ์ ๋ฐฐ์์ค์ ๊ฐ์ฅ ์ฒ์์ผ๋ก ๊ฐ์ ์์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ํฐ ์ง์์ ์์ ์ง์์ ์ฐจ์ด๋งํผ ์์ ์ง์๋ฅผ ๊ฐ์ง ์์์ ๋ฐฐ์(๊ณฑํด์ง)์ด ๋๋ ์๋ฆฌ.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋์ ๊ณฑํ ๊ฒฐ๊ณผ๋ ๊ณต๊ต๋กญ๊ฒ๋ ์ ๊ฐ๋ค.
[์์ ํ๋ณ (์๋ผํ ์คํ ๋ค์ค์ ์ฒด)]
์ด๋ค ์ n์ด ์์๋ฅผ ํ๋ณํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ์์, 2๋ถํฐ n-1 ๊น์ง ๋๋ฉด์ n์ด ๋๋์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋์ง ํ์ธํ๋ ๊ฒ.
์ข๋ ๋๋ํ๊ฒ๋, ๊น์ง๋ง ๋๋ฉด์ n์ด ๋๋์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋์ง ํ์ธํ๋ ๊ฒ.
๊ทธ ์ด์์ผ๋ก ๋๋์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด, ์ด๋ฏธ ๊ทธ ์ด์ ์์ ํ์ธ์ด ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ.
์ด๊ฒ๋ณด๋ค ๋ ๋๋ํ ์ฌ๋ -> ์๋ผํ ์คํ ๋ค์ค.
"์์๊ฐ ์๋ ์๋ค์ ๋ฐ๋์ ๋ค๋ฅธ ์์๋ก ๋๋์ด์ง๋ค."
1๋ถํฐ max๊น์ง ์๊ฐ ๋ค์ด์๋ ๋ฆฌ์คํธ๊ฐ ์์ ๋,
2๋ก ๋๋์ด ๋จ์ด์ง๋ ์๋ฅผ ์ ๋ถ ์ง์ฐ๊ณ , 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ ์๋ฅผ ์ ๋ถ ์ง์ฐ๊ณ , 5๋ก, 7๋ก , ... .
๋จ, ๋๋์ด ๋จ์ด์ง๋ ์๋ฅผ ์ง์ธ ๋, ์๊ธฐ ์์ ๋ณด๋ค ํฌ๊ธฐ๊ฐ ๋ฎ์ ๋ฐฐ์๋ฅผ ์ ์ฉํ ํ์๋ ์๋ค.
์ด๋ฏธ ์ด์ ์์์์ ํ์ฌ์ ์๊ธฐ์์ ์ด ๋ฐฐ์๋ก ์ฌ์ฉ๋์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์.
def sieve_of_eratosthenes(int max):
flags = [True for _ in range(max+1)] # inclusive
count = 0
flags[0] = flags[1] = False
prime = 2
while prime <= math.sqrt(max): # ์ฐ๋ฆฌ๊ฐ ์์์ธ์ง ํ๋ณํ๊ณ ์ถ์ ์ ์ค ๊ฐ์ฅ ํฐ ์๋ max.
cross_off(flags, prime)
prime = get_next_prime(flags, prime) # ๋ฐ๋ก ๋ค์์ ์๋ True ํ๋๊ทธ ์ฐพ๊ธฐ
return flags
def cross_off(flags, prime):
i = prime # ์ด์ ์์์์ ์ด๋ฏธ ์ง์์ง ๊ฐ๋ค์ ๊ฑด๋ ๋. ์ฆ, 1๋ถํฐ ์์ํ์ง ์์.
x = i * prime
while x < len(flags):
flags[x] = False
x += prime
๋ฆฌ์คํธ์ ํ์๋ง ๋ฃ์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ ๋ฐ.
๐ ๋คํธ๋ฅผ ๋์ก์ ๋, ๋ ์์ ๊ณตํต๋ ๋ถ๋ถ์ ๋ค์ด๊ฐ ํ๋ฅ .
๋์ ๊ณฑํ๋ฉด, ๋ ์์ ๊ณตํต๋ ๋ถ๋ถ์ ๋ค์ด๊ฐ ํ๋ฅ ์ ๊ณ์ฐํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, 1๋ถํฐ 10๊น์ง ์์์ ํ๋๋ฅผ ๋ฝ๋๋ค๊ณ ํ ๋, 5๋ณด๋ค ์์ผ๋ฉด์ ์ง์๋ฅผ ๋ฝ์ ํ๋ฅ ์
5๋ณด๋ค ์์ ์๋ฅผ ๋ฝ์ ํ๋ฅ ๊ณผ, 5๋ณด๋ค ์์ผ๋ฉด์ ์ง์๋ฅผ ๋ฝ์ ํ๋ฅ ์ ๊ณฑํด์ ๊ตฌํ ์ ์๋ค.
ํํธ,
๋ผ๊ณ ํ ์ ์์ผ๋ฏ๋ก, B์ ์ํ๋ฉด์ A์๋ ์ํ ํ๋ฅ ์ ๋ค์๊ณผ ๊ฐ์ด ํํํ ์๋ ์๋ค.
์ด๋ฅผ ๋ฒ ์ด์ฆ ์ ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๐ ๋คํธ๋ฅผ ๋์ก์ ๋, ๋ ์ ์ค์์ ํ๋์ ๋จ์ด์ง ํ๋ฅ .
๊ฒน์น๋ ๋ถ๋ถ์ด ๋๋ฒ ๊ณ์ฐ๋๋ฏ๋ก ํ ๋ฒ์ ๋นผ์ฃผ์ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, 1๋ถํฐ 10๊น์ง ์์์ ํ๋๋ฅผ ๋ฝ๋๋ค๊ณ ํ ๋, ์ง์๋ฅผ ๋ฝ๊ฑฐ๋ 1~5 ์ค์์ ๋ฝ์ ํ๋ฅ ์
์ง์๋ฅผ ๋ฝ์ ํ๋ฅ ๊ณผ 1~5 ์ค์์ ๋ฝ์ ํ๋ฅ ์ ๋ํ๊ณ , ์ง์์ด๋ฉด์ 1~5 ์ค์์ ๋ฝ์ ํ๋ฅ ์ ํ ๋ฒ ๋นผ์ฃผ๋ฉด ๊ตฌํ ์ ์๋ค.
๐ ๋
๋ฆฝ ์ฌ๊ฑด
ํ ์ฌ๊ฑด์ ๋ฐ์ ์ฌ๋ถ๊ฐ ๋ค๋ฅธ ์ฌ๊ฑด์ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์๋ ๊ฒฝ์ฐ.
๐ ์ํธ ๋ฐฐํ์ฑ (๋ฐฐ๋ฐ ์ฌ๊ฑด)
ํ ์ฌ๊ฑด์ด ์ผ์ด๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ฌ๊ฑด์ ๋ฐ์ํ ์ ์๋ ๊ฒฝ์ฐ.
๋์ ๋์์ ๋ง์กฑํ ์ ์์.
์๋ํ๋ฉด ๋
๋ฆฝ ์ฌ๊ฑด์ ํ ์ฌ๊ฑด์ ๋ฐ์ ์ฌ๋ถ๊ฐ ๋ค๋ฅธ ์ฌ๊ฑด์ ์ํฅ์ ๋ผ์น๋ฉด ์๋๋๋ฐ, ์ํธ ๋ฐฐํ์ฑ์ ์ํฅ์ ๋ฐ๋ ๊ฒฝ์ฐ(์ผ์ด๋๋ฉด ์๋จ)์ด๊ธฐ ๋๋ฌธ. ๋จ, ๋ ์ฌ๊ฑด ์ค ํ๋์ ํ๋ฅ ์ด๋ผ๋ 0์ด๋ฉด ๊ฐ๋ฅ.
[๋ฉด์ ๋ฌธ์ ]
6.6 ๋ชจ๋ ์ฌ๋๋ค์ด ๋๋ํ๊ณ , ์์ ์ ๋๋์๊ฐ ํธ๋ฅด๋ค๋๊ฑธ ์๋ฉด ๊ทธ๋ ๋ ๋ ๊ฒ์ด๋ผ๋ ๊ฐ์ ์ด ์์.
6.7 ์ ํด์ง ๊ฐ์กฑ์ ์๊ฐ ์๊ธฐ ๋๋ฌธ์, ๊ฑฐ์ ๋ฌดํํ ๊ฐ์์ ๊ฐ์กฑ๋ค์ด ์๋ค๊ณ ๋ณด๋ฉด ๋จ.
๋ชจํธ์ฑ ํด์: ์ง๋ฌธ ๋์ง๊ธฐ
ํต์ฌ ๊ฐ์ฒด์ ์ค๊ณ
Table
, Guest
, Party
, Order
, Meal
, Employee
, Server
, Host
๊ด๊ณ ๋ถ์
Party
๋ Guests
๋ฐฐ์ด์ ๊ฐ๊ณ ์์ด์ผ ํ๋ค.Server
์ Host
๋ Employee
๋ฅผ ์์๋ฐ๋๋ค.Party
๋ ์ฌ๋ฌ๊ฐ์ Table
์ ๊ฐ์ง ์ ์์ง๋ง, Table
์ ํ๋์ Party
๋ง ๊ฐ์ง ์ ์๋ค.ํ๋ ๋ถ์
์ฑ๊ธํค(singleton)
์ด๋ค ํด๋์ค๊ฐ ์ค์ง ํ๋์ ๊ฐ์ฒด๋ง์ ๊ฐ๋๋กํ๊ณ , ํ๋ก๊ทธ๋จ์์ ์ค์ง ๊ทธ ๊ฐ์ฒด๋ง์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅ.
ํฉํ ๋ฆฌ ํจํด(factory pattern)
์ด๋ค ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋, ์ด๋ค ํด๋์ค๋ฅผ ์์ฑํ ์ง๋ฅผ ํ์ ํด๋์ค์์ ๊ฒฐ์ ํ ์ ์๋๋ก ๋์์ค.
์ฌ๊ท์ ๊ด๋ จ๋ ๋ฌธ์ ์ ํจํด
์ฌ๊ท์ ํด๋ฒ์, ๋ถ๋ถ ๋ฌธ์ (subproblem)์ ๋ํ ํด๋ฒ์ ํตํด ์์ฑ๋๋ค.
๋ถ๋ถ ๋ฌธ์ ๋ก ๋๋๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ํํ ์ธ๊ฐ์ง.
[bottom-up]
๊ฐ์ฅ ์ง๊ด์ . ์ฃผ๋ก ์ํ์ ์ธ ๊ตฌํ.
๊ฐ๋จํ ๊ฒฝ์ฐ๋ค์ ๋ํ ํ์ด๋ฒ์ ๋ฐ๊ฒฌํ๋ ๊ฒ์ผ๋ก ์์.
์ด์ ์ ํ์๋ ์ฌ๋ก๋ฅผ ํ์ฅํ์ฌ ๋ค์ ํ์ด๋ฅผ ์ฐพ๋๋ค.
[top-down]
๋ ๋ช
ํํด์ ๋ณต์กํด ๋ณด์ผ ์๋. ์ฃผ๋ก ์ฌ๊ท์ ์ธ ๊ตฌํ.
์ด๋ป๊ฒ ํ๋ฉด N์ ๋ํ ๋ฌธ์ ๋ฅผ ๋ถ๋ถ ๋ฌธ์ ๋ก ๋๋ ์ ์์์ง ์๊ฐ.
๋๋ ๋ถ๋ถ๋ฌธ์ ์ ๊ฒฝ์ฐ๊ฐ ์๋ก ๊ฒน์น์ง ์๋๋ก ์ฃผ์ํด์ผ.
[half-and-half]
์ด์งํ์์ด๋ ๋ณํฉ์ ๋ ฌ์ด ์ฌ์ฉํ๋ ์ ๊ทผ๋ฒ.
์ฌ๊ท์ ํด๋ฒ(recursive)์ ๊ณต๊ฐ ํจ์จ์ฑ์ด ๋์จ.
์ฌ๊ท์ ๊น์ด๊ฐ n์ผ ๋, O(n)๋งํผ์ ๊ณต๊ฐ์ ์คํ์์ ์ฐ๊ฒ๋จ.
๋ชจ๋ ์ฌ๊ท์ ์๊ณ ๋ฆฌ์ฆ์ ์ํ์ (iterative)์ผ๋ก ๊ตฌํ๋ ์ ์์.
์ํ์ ์ธ ๊ตฌํ์ ๊ณต๊ฐ ํจ์จ์ฑ์ด ๋ ์ข์ง๋ง ์ฝ๋๊ฐ ํจ์ฌ ๋ณต์กํ ์ ์์.
๋ง์ ์ฌ๋๋ค์ด ๋ฌด์์ํ์ง๋ง, ํ ๋ฒ ๊ฐ์ ์ก์ผ๋ฉด ์ฝ๊ฒ ํ์ด๋ผ ์ ์๋ค.
๋์ ํ๋ก๊ทธ๋๋ฐ์
๋ฅผ ์ฐพ์๋ด๊ณ , ๊ฐ ๋ถ๋ถ๋ฌธ์ ์ ํด๋ต์ ์บ์ฑํ๋ฉด ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ฉ์ด ๊ตฌ๋ถ์ ํ๊ธฐ๋ ํ๋ค.
- top-down ๋์ ํ๋ก๊ทธ๋๋ฐ : ๋ฉ๋ชจ์ด์ ์ด์
- bottom-up ์ ๊ทผ๋ฒ : ๋์ ํ๋ก๊ทธ๋๋ฐ
bottom-up์ ์ฃผ๋ก iterativeํ ๊ตฌํ์ด๊ธฐ ๋๋ฌธ์ '๋ฉ๋ชจ'๊ฐ ๋ฑํ ํ์ํ์ง ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ธ๋ฏ. ํ์ง๋ง ์ฑ ์์๋ ์ ๋ถ '๋์ ํ๋ก๊ทธ๋๋ฐ'์ผ๋ก ๋ถ๋ฅธ๋ค.
[ํผ๋ณด๋์น ์์ด]
๋์ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๊ฐ์ฅ ๊ฐ๋จํ ์์.
๐ก ์ฌ๊ท
def fib(i):
if i == 0: return 0
if i == 1: return 1
return fib(i-2) + fib(i-1)
์ํ์๊ฐ์?
๊ฐ ํธ์ถ์ ์ํ๋๋ ์๊ฐ์ O(1)์ด๊ธฐ ๋๋ฌธ์, ํธ์ถํธ๋ฆฌ ๊ทธ๋ ค์ ํธ์ถํ์๋ฅผ ๊ณ์ฐํด๋ณด๋ฉด ๋จ.
๋์ด๊ฐ n์ ๊ฐ ๋
ธ๋๋ค์ด ๋๋ถ๋ถ ๋ ๊ฐ์ ์์๋
ธ๋๋ฅผ ๊ฐ์ง๊ณ ์์ -> O(2^n).
์ค์ ๋ก๋ ์ค๋ฅธ์ชฝ ๋ถ๋ถํธ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ์ผ์ชฝ ๋ถ๋ถํธ๋ฆฌ์ ํฌ๊ธฐ๋ณด๋ค ์์ -> O(1.6^n)
๐ก ํํฅ์ ๋์ ํ๋ก๊ทธ๋๋ฐ(๋ฉ๋ชจ์ด์ ์ด์
)
์์ ๋ฐฉ์์๋ ์ค๋ณต ํธ์ถ์ด ๋ง๋ค. ๋งค๋ฒ fib(i)๋ฅผ ๊ณ์ฐํ ๋ ๋ง๋ค ์บ์ฑํ๊ณ ๋์ค์ ํ์ฉํ๋ฉด ๋๋ค.
๊ทธ๊ฒ ๋ฐ๋ก ๋ฉ๋ชจ์ด์ ์ด์
.
def fib(i):
memo = [0, 1]
return fib_with_memo(i, memo)
def fib_with_memo(i, memo):
if i < len(memo):
return memo[i]
a = fib_with_memo(i-2, memo)
b = fib_with_memo(i-1, memo)
memo.append(a + b)
return memo[i]
์ํ์๊ฐ์?
ํธ์ถํธ๋ฆฌ๊ฐ ๊น์ด n๊น์ง ํ์ชฝ์ผ๋ก ๊ฑฐ์ ๊ณง์ฅ ๋ด๋ ค๊ฐ. ๊ฐ ๋
ธ๋์ ์์๋
ธ๋๋ ๋๊ฐ ์ฉ. -> O(N)
๐ก ์ํฅ์ ๋์ ํ๋ก๊ทธ๋๋ฐ
์ฌ๊ท์ ์ธ ๋ฉ๋ชจ์ด์ ์ด์
์ผ๋ก ์ ๊ทผํ๋, ๋ค์ง์ด์ ๊ตฌํํ๋ค๊ณ ์๊ฐ.
์ด๊ธฐ ์ฌ๋ก(base case)์ธ fib(0), fib(1)๋ฅผ ๋จผ์ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ ์ด์ฉํด ์ฐจ๋ก๋ก fib(2), fib(3), ... ๋ฅผ ๊ณ์ฐ.
def fib(n):
memo = []
memo.append(0) # fib(0)
memo.append(1) # fib(1)
i = 2
while i <= n:
a = memo[i-2]
b = memo[i-1]
memo.append(a + b) # fib(i)
n += 1
return memo[i]
๋จ, ํ์ฌ ์งํ์ค์ธ ์ธ๋ฑ์ค์์ 2์ด์ ์ง๋ ๊ฐ๋ค์ ๋์ด์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก,
๋ฃจํ์ ๋ณ์๋ฅผ ๋๊ณ ์ฌ์ฉํด๋ ๋๋ค.
def fib(n):
a = 0 # fib(0)
b = 1 # fib(1)
c = n
i = 2
while i <= n:
c = b + a # fib(i)
a = b
b = c
return c
8.1
์์์ ์ธ๊ธ๋ ์ฌ๊ท์ ํด๋ฒ์ ์ ์ฉ.
"f(n-1)์ ๋ํ ํด๋ต์ ๋ํ๊ฑฐ๋/์ ๊ฑฐํ๊ฑฐ๋/๋ณ๊ฒฝํ์ฌ f(n)์ ๊ณ์ฐํด๋ธ๋ค."n๋ฒ์งธ ๊ณ๋จ์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ๋,
- n-1๋ฒ์งธ ๊ณ๋จ๊น์ง ๋๋ฌํ ํ, 1๊ณ๋จ ์ค๋ฅธ๋ค
- n-2๋ฒ์งธ ๊ณ๋จ๊น์ง ๋๋ฌํ ํ, 2๊ณ๋จ ์ค๋ฅธ๋ค
- n-3๋ฒ์งธ ๊ณ๋จ๊น์ง ๋๋ฌํ ํ, 3๊ณ๋จ ์ค๋ฅธ๋ค
์ด๋ฅผ top-down ์ ๊ทผ๋ฒ์ผ๋ก, ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ฌ์ฉํด ํด๊ฒฐ.
memo = [0 for _ in range(n+1)] memo[0] = 1 # for memo[3] memo[1] = 1 memo[2] = 2 def go(n, memo): if memo[n] != 0: return memo[n] memo[n] = go(n-1, memo) + go(n-2, memo) + go(n-3, memo) return memo[n]
๋ค๋ง, ๋ฉ๋ชจ์ด์ ์ด์ ๊ณผ ๊ด๊ณ์์ด, n=37๋ง ๋์ด๋ ๊ฒฝ์ฐ์ ์๊ฐ int ์๋ฃํ์ ๋ฒ์๋ฅผ ๋์ด์ ๋ค. ๋ฉด์ ์์ ํด๊ฒฐํ ํ์๋ ์๋ ๋ฌธ์ ์ด์ง๋ง(์๋ฐ์์ BigInteger๊ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํด ํด๊ฒฐ), ์ด ๋ฌธ์ ์ ์ ๋ฉด์ ๊ด์๊ฒ ์ง์ ํ๋ฉด ์ ์๋ฅผ ์ป์ ์ ์๋ค.
8.2
๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๊ท์ ํด๋ฒ. ๋๋ถ์ด์,
"๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ๋๋ ๋ถ๋ถ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด๊ณ , ๊ฐ ๋ถ๋ถ๋ฌธ์ ์ ํด๋ต์ ์บ์ฑ"
(r, c)
๋ก ๊ฐ๊ธฐ ์ํด์๋,(r-1, c)
์์ ์๋๋ก ํ ์นธ ์ด๋ํ๊ฑฐ๋,(r, c-1)
์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ๋ฉด ๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ ์ด์ ์นธ์์ ๋ค์ ์๊ฐํด๋ณด๋ฉด ๋๋ค(r-1, c-1)
์ ๋ํ ๊ฒ์ฌ๋ฅผ ์ค๋ณตํด์ ์งํํ๋ค. ์ด๋ฅผ ์บ์ฑํ๋ค.def get_path(maze, r, c, path, failed): if r < 0 or c < 0 or not maze[r][c]: return False if (r,c) in failed: return False if (r==0 and c==0) or \ get_path(maze, r-1, c, path, failed) or \ get_path(maze, r, c-1, path, failed): point = (r,c) path.append(point) return True failed.append((r,c)) return False
์ฌ๊ธฐ์ ๋ณด๋ฉด ๋๋ฌํ ์ ์๋ ์ง์ ๋ง ์ ์ฅํด๋๊ณ (
failed
), ๋๋ฌํ ์ ์๋ ์ง์ ์ ๋ฐ๋ก ์ ์ฅํ์ง ์๋๋ค. ์ด๋ ๊ฒฐ๊ตญ ์ง๊ธ ํด๋ต์ ์ฐพ๋ ๋ฐฉ์์ด ์๋ง์ ๋ถ๊ธฐ(๊ฐ์ง์น๊ธฐ)๋ฅผ ์๋ํ๋ฉด์ ๋ฑ ํ๋๋ง ์ฑ๊ณต์ํค๋ ๊ฒ์ด๊ธฐ์ ๊ทธ๋ ๋ค. ๊ทธ ๋ฌด์ํ ๋ง์ ๋ถ๊ธฐ ์ค์ ํ๋๊ฐ ์ด๋ค ํน์ ์ฝ์คํ๋ค์์ ์ฑ๊ณตํ ๊ฒ์ด๊ณ , ๊ทธ ๊ณผ์ ์์ ์ด๋ฏธ ์คํจํ๋ ๋ถ๊ธฐ๋ค๋ง ๋ค์ ๋ณด์ง ์์ผ๋ฉด ๋๋ค๋ ์ ์ ์๊ฐํด๋ณด์.
๋ฐฑํธ๋ํน ๊ธฐ๋ฒ์ ์ฐธ๊ณ .
8.3 half-and-half ์ ๊ทผ๋ฒ.
๋ฌธ์ ์๋ ์์ง๋ง ๊ฐ ์์๋ค์ ์ ์๋ผ๋ ๊ฐ์ . ๊ฑฐ์ ์ด๋ถํ์๊ณผ ํก์ฌํ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ต์ ์ฐพ์ผ๋ฉด ๋จ.
8.4 ์ด๊ธฐ ์ฌ๋ก๋ก๋ถํฐ์ ํ์ฅ' ์ ๊ทผ๋ฒ.
๋จผ์ , ์๊ฐ๋ณต์ก๋ ๊ณ์ฐ์ ์ํด ๋ถ๋ถ์งํฉ์ ๊ฒฝ์ฐ์ ์ ์๊ฐํด๋ณด๊ธฐ.
๋ถ๋ถ์งํฉ์ ๋ง๋ ๋ค๊ณ ํ์ ๋, ๊ฐ ์์๊ฐ ํฌํจ๋๊ฑฐ๋/์๋๊ฑฐ๋ ์ธ ๊ฒฝ์ฐ๊ฐ ์์์ ๊ฐ์๋งํผ ๊ณฑํด์ง๋ค๊ณ ์๊ฐํด๋ณผ ์ ์๋ค.
์ฆ n๊ฐ์ ์์๋ฅผ ๊ฐ์ง ์งํฉ์ ๋ถ๋ถ์งํฉ ๊ฐ์๋ {2*2*2*...} ๋ฅผ n๋ฒ ํด์ผ ํ๋ฏ๋ก, 2^n ์ด๋ค.
๊ฒฐ๊ตญ ๋ชจ๋ ๋ถ๋ถ์งํฉ์ ๋ฆฌ์คํธ๋ฅผ ๋ฐํํด์ผ ํ๋ฏ๋ก, ๋ชจ๋ ๋ถ๋ถ์งํฉ์ ์์์ ๊ฐ์์ ์ดํฉ๋งํผ์ ๊ฑธ๋ฆด ๊ฒ์ด๋ค.
์ด๋, ํ๋์ ์์๋ ๋ชจ๋ ๋ถ๋ถ์งํฉ์ ๋ชจ์ ์ค์ ์ ๋ฐ์๋ ์ํ๊ฒ ๋๋ค. -> {1(์ํ๊ฒฝ์ฐ)*2*2*...} + {1(์์ํ๊ฒฝ์ฐ)*2*2*...}
๋ค์ ๋งํด, ํ๋์ ์์๋ ๋ชจ๋ ๋ถ๋ถ์งํฉ์ ๋ชจ์์์ 2^(n-1) ๋ฒ๋งํผ ๊ทธ๊ณณ์ ์์๋ก ์ถํํ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ ๋ชจ๋ ๋ถ๋ถ์งํฉ์ ๋ชจ์์ ์ด ์์์ ๊ฐ์๋ n*2^(n-1) ๊ฐ ๋๋ฏ๋ก, ์ด๊ฒ์ด BCR(๊ฐ๋ฅํ ์ต์ ์ ์ํ์๊ฐ)์ด ๋๋ค.์ดํ์ ์ด๊ธฐ ์ฌ๋ก๋ก๋ถํฐ ํ์ฅ๋ฒ ์ ์ฉ.
8.5 half-and-half ์ ๊ทผ๋ฒ.
8.6 ์ด๊ธฐ ์ฌ๋ก๋ก๋ถํฐ์ ํ์ฅ ์ ๊ทผ๋ฒ.
8.7 ์ด๊ธฐ ์ฌ๋ก๋ก๋ถํฐ์ ํ์ฅ ์ ๊ทผ๋ฒ.
8.9 ์ด๊ธฐ ์ฌ๋ก๋ก๋ถํฐ์ ํ์ฅ ์ ๊ทผ๋ฒ.
base case์์ ํ์ฅํ์ฌ ์ผ๋ฐํจํด์ ๋์ถํ๊ณ , ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
ํ์ง๋ง ์ฝ๊ฐ ๋นํจ์จ์ .์ฒ์๋ถํฐ ๊ทธ๋ ค๋๊ฐ ์๋ ์๋ค. ์ผ์ชฝ ๊ดํธ์ ์ค๋ฅธ์ชฝ ๊ดํธ๋ฅผ ๋ถ๊ธฐํด๊ฐ๋ฉฐ ๊ทธ๋ฆฌ๋, ๊ฐ ๊ดํธ์ ๊ฐ์๋ฅผ ์ถ์ ํ๋ฉฐ ๊ทธ๋ฆฌ๊ณ ๊ดํธ ๋ฌธ๋ฒ์ ์ด๊ธ๋์ง ์๋์ง ํ์ธํ๋ฉฐ ๊ทธ๋ฆฌ๋ฉด ๋๋ค.
์ผ๋ง๋ ์ต๊ณ ์ ์ค๊ณ๋ฅผ ํ๋๋ ๋ณด๋ค๋ ๊ทธ ๊ณผ์ ์ด ์ค์ํ๊ฒ ํ๊ฐ๋จ.
์์คํ ์ ์ฒด๋ฅผ ์ค๊ณํ๋ผ๋ ์์ฒญ์ด ์๋,
์ ์ค๊ณํด๋ณด๋ผ๋ ์์ฒญ์ ๋ฐ์์ ๋, ๊ท๋ชจ ํ์ฅ์ฑ์ ์ ๊ฒฝ ์จ์ผํ๋ค.
์์๋๋ฉด ์ข์ ์ง์. ๋งค์ฐ ํผ์์ ์ด๋ฏ๋ก ์ธํฐ๋ท์ ํตํด ์ถ๊ฐ ๊ณต๋ถํ ๊ฒ.
๋ง ๊ทธ๋๋ก.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ฐ์์ ๋ ์ฐ๋ฆฌ๊ฐ ํด์ผํ ์ผ์
์ค๊ณํ ์์คํ ์ ์ฝ์ ์ ๋ํด ์ด๋ฆฐ ๋ง์์ผ๋ก ๋ฐ์๋ค์ฌ์ผ.
๋๋ฆฌ ์ฌ์ฉ๋๋ ์ ๋ ฌ/ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฒฝํ ์ดํดํ๋ ๊ฑด ๊ต์ฅํ ๊ฐ์น์๋ ์ผ.
์ํฉ์ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ ์ฌ๋ฆด ์ ์์ด์ผ.
[๋ฒ๋ธ ์ ๋ ฌ] | ํ๊ท ๋ฐ ์ต์
์คํ์๊ฐ: , ๋ฉ๋ชจ๋ฆฌ:
๋ฐฐ์ด์ ์ฒซ ์์๋ถํฐ ์์ฐจ์ ์ผ๋ก, ํ์ฌ ์์๊ฐ ๊ทธ๋ค์ ์์๋ณด๋ค ํฌ๋ฉด ์๋ก ๋ฐ๊พธ๋ ์์
์ ๋ฐ๋ณต. n-1๋ฒ ๋น๊ต, n-2๋ฒ ๋น๊ต, ... , 1๋ฒ ๋น๊ต.
[์ ํ ์ ๋ ฌ] | ํ๊ท ๋ฐ ์ต์
์คํ์๊ฐ: , ๋ฉ๋ชจ๋ฆฌ:
๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ์์๋ฅผ ๊ณ์ํด์ ๊ณจ๋ผ๋ด ์์ชฝ๋ถํฐ ์ฐจ๊ณก์ฐจ๊ณก ์๋ ๋ฐฉ๋ฒ.
[๋ณํฉ ์ ๋ ฌ] | ํ๊ท ๋ฐ ์ต์
์คํ์๊ฐ: , ๋ฉ๋ชจ๋ฆฌ:
๋ฐฐ์ด์ ์ ๋ฐ์ฉ ๋๋์ด ๊ฐ๊ฐ์ ์ ๋ ฌํ ๋ค์, ์ด ๋์ ํฉํ์ฌ ๋ค์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ.
๋๋ ์ ๋ฐ์ ์ ๋ ฌํ ๋๋ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋๊ณ , base case ์๋ ํ๊ฐ์ง๋ฆฌ ๋ฐฐ์ด ๋๊ฐ๋ฅผ ํฉํ์ฌ ์ ๋ ฌํ๊ฒ ๋จ.
์ด ์๊ณ ๋ฆฌ์ฆ์์๋ '๋ณํฉ(merge)'๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋ณต์ก.
๊ธฐ์กด ๋ฐฐ์ด์ temp์ ๋ณต์ฌํด ๋๊ณ , ์ด temp์ ์ผ์ชฝ ์ ๋ฐ์ ์์, ์ค๋ฅธ์ชฝ ์ ๋ฐ์ ์์์ ๋์์ ๋ณด๋ฉด์ ์์ ์์๋๋ก ์๋ ๋ฐฐ์ด์ ์ฐจ๊ณก์ฐจ๊ณก ์์๋๊ฐ๋ค. ๋ ์ชฝ ์ค ํ ์ชฝ์ ์ํ๊ฐ ๋จผ์ ๋๋ฌ์ ๋, ๋ค๋ฅธ ์ชฝ์ ๋จ์ ๋ถ๋ถ์ ์๋ ๋ฐฐ์ด์ ๋จ๊น์์ด ๋ณต์ฌํด ๋ฃ๋๋ค. ์ด ๋, ์ผ์ชฝ์ ์ํ๊ฐ ๋จผ์ ๋๋ฌ์ ๊ฒฝ์ฐ์๋ ์ค๋ฅธ์ชฝ์ ๋จ์ ๋ถ๋ถ์ ๋ณต์ฌํด ๋ฃ์ ํ์๊ฐ ์๋ค. ํด๋น ๋ถ๋ถ์ ์์น๋ ๋ณํฉ ์ ์๋ ๋ฐฐ์ด ์์์ ๋ฎ์ด์์์ง์ง ์์๊ณ , ๋จ์ ๋ถ๋ถ์ด ์ ์ด์ ์๋ ๋ฐฐ์ด์์ ๋ณต์ฌํด์๊ธฐ ๋๋ฌธ์ด๋ค.
[ํต ์ ๋ ฌ] | ์คํ์๊ฐ: ํ๊ท , ์ต์
. ๋ฉ๋ชจ๋ฆฌ:
๋ฌด์์๋ก ์ ์ ๋ pivot์ ๋ฐ๋ผ, ๊ทธ ๋ณด๋ค ์์ ์์๋ค์ pivot ์์ ํฐ ์์๋ค์ pivot ๋ค๋ก ๋ณด๋ธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ pivot๊ฐ์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ๋๋์ด ๊ฐ๊ฐ์์ ๋ค์ ๋ฐ๋ณต. pivot๊ฐ์ด ์ค๊ฐ์ ๊ฐ๊น์ด ๊ฐ์ด ๋๋ฆฌ๋ผ๋ ๋ณด์ฅ์ด ์๊ธฐ ๋๋ฌธ์, ์ต์
์ ๊ฒฝ์ฐ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์.
[๊ธฐ์ ์ ๋ ฌ] | ํ๊ท ๋ฐ ์ต์
์คํ์๊ฐ: (k๋ ์๋ฆฟ์์ ๊ฐ์)
์ ์์ฒ๋ผ ์ ํํ ๋นํธ๋ก ๊ตฌ์ฑ๋์ด ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ. ๊ฐ์ฅ ๋ฎ์ ์๋ฆฌ์์์ ์์ํด ๊ฐ์ฅ ๋์ ์๋ฆฌ์๊น์ง, ๊ฐ ์๋ฆฌ์๋ฅผ ์ํํ๋ฉฐ ๊ฐ ์๋ฆฌ์ ๊ฐ์ ๋ฐ๋ผ ๊ทธ๋ฃน์ ๋ง๋ ๋ค. ์ด ๊ทธ๋ฃน๋ค์ด ๊ฐ์ง๊ณ ์๋ ์์๊ฐ, ๋ค์ ์๋ฆฌ์์์ ์ ๋ ฌ์ ์ํํ ๋ ๊ฐ ๊ทธ๋ฃน ๋ด์ ์ ๋ ฌ ์์๋ฅผ ๊ฒฐ์ ํ๋ค. ์๋ฅผ ๋ค์ด, 12 ์ 10 ์ด ์์ผ๋ฉด ์ฒซ๋ฒ์งธ ์๋ฆฌ์ ๊ทธ๋ฃน์์๋ 0
๊ทธ๋ฃน์ 10์ด, 2
๊ทธ๋ฃน์ 12๊ฐ ์ํ ๊ฒ์ด๋ค. ๋๋ฒ์งธ ์๋ฆฌ์ ๊ทธ๋ฃน์์๋ ๋๊ฐ ๋ค 1
๊ทธ๋ฃน์ ์ํ๊ฒ ๋๋๋ฐ, ์ด ๋ ๋ด๋ถ์์์ ์์๊ฐ ์ด์ ์๋ฆฌ์ ๊ทธ๋ฃน์ ์์์ ๋ฐ๋ผ ์ ํด์ง๋ค. 0
๊ทธ๋ฃน์ ์ํ๋ 10์ด 2
๊ทธ๋ฃน์ ์ํ๋ 12๋ณด๋ค ์์๊ฒ ๋๋ค. ์ด๋ ๊ฒ ๊ฐ์ฅ ํฐ ์๋ฆฌ์๊น์ง ์ ๋ ฌ์ ์๋ฃํ๋ฉด ๋ฐฐ์ด ์ ์ฒด์ ๋ํ ์ ๋ ฌ์ด ์์ฑ๋๋ค.
[์ด์ง ํ์] |
์ ๋ ฌ๋ ๋ฐฐ์ด์์ ์์ x๋ฅผ ์ฐพ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ. ์ค๊ฐ์ ์์นํ ์์์์ ์์ํด์, x์์ ๋์๋น๊ต์ ๋ฐ๋ผ ์ผ์ชฝ/์ค๋ฅธ์ชฝ ๋ถ๋ถ ์ค ํ ๋ถ๋ถ๋ง ๊ฐ์๋ฐฉ๋ฒ์ผ๋ก ๋ค์ ์ดํด๋ณด๋ ๊ฒ.
์ด์งํ์์๋ง ์ฝ๋งค์ด์ง ์๋๋ก ์ฃผ์ํ์. ์ด์งํธ๋ฆฌ ํน์ ํด์ํ ์ด๋ธ ํตํด ํ์ํ ์๋ ์๋ค.
10.1
ํ ์คํ ๊ด๋ จ ์ง๋ฌธ๋ค์ ๋ณดํต ๋ค ๊ฐ์ง ๋ฒ์ฃผ ์ค ํ๋์ ์ํจ
์ ๊ทผ๋ฒ
๊ฐ์ฅ ์ฌ์ด ์ข
๋ฅ์ ํ
์คํธ.
๊ทธ๋๋ ๋ฉด์ ๊ด๊ณผ ๋ํ ์ค์.
์ ๊ทผ๋ฒ
e.g. ์ ๋ ฌ ํจ์๊ฐ ์ฃผ์ด์ก์ ๋,
์ ๊ทผ๋ฒ
e.g. ๊ตฌ๊ธ ํฌ๋กฌ์ด ์คํํ์๋ง์ ์ฃฝ๋๋ค๋ ๋ฒ๊ทธ ๋ฆฌํฌํธ.
๊ฐ์ฑ์ ๊ฐ๋ ํ์ ์ง์ .. ๊ฐ์ฑ์์ ์๊ณ ๋ฆฌ์ฆ .. ๊ธฐ๋ ๋ง๋ ์ ๋๋ค .. ์์ข์ขก~