1. ๋ฐฐ์ด๊ณผ ๋ฌธ์์ด
: ๋์ ๋ฌธ์ ํ์ด๋ ๋์ฒด ๊ฐ๋ฅ
2. ํด์ํ ์ด๋ธ(HashTable)
: ํจ์จ์ ์ธ ํ์์ ์ํ ์๋ฃ๊ตฌ์กฐ
: ํค(Key)๋ฅผ ๊ฐ(Value)์ ๋์
<๊ตฌํ๋ฐฉ๋ฒ> | ์ฐ๊ฒฐ๋ฆฌ์คํธ(LinkedList) + ํด์์ฝ๋ํจ์(HashCodeFuction) |
1 | Key์ ํด์์ฝ๋๋ฅผ ๊ณ์ฐ : ๋ณดํต int ๋๋ longํ ์ฐ์ถ (์ด๋ key๊ฐ์ ๋ฌดํํ์ง๋ง int๋ ์ ํํ๋ฏ๋ก ํด์์ฝ๋์ ์ค๋ณต์ด ๋ฐ์ํ ์ ์๋ค๋ ์ ์ ์) |
2 | ํด์์ฝ๋๋ฅผ ์ด์ฉํ์ฌ(e.g. hash(key)%array_length) ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๊ตฌํ |
3 | ๋ฐฐ์ด์ ๊ฐ ์ธ๋ฑ์ค์ ์ฐ๊ฒฐ๋ฆฌ์คํธ(ํค+๊ฐ)๋ฅผ ์ ์ฅ ์ด๋, ์ถฉ๋์ ๋๋นํ์ฌ ๋ฐ๋์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๋ค. |
<๊ฐ์ ์ฐพ๋ ๋ฐฉ๋ฒ> | * ์ถฉ๋์ด ์์ฃผ ๋ฐ์ํ๋ค๋ฉด O(N), ์ต์ ํ ๋ ๊ฒฝ์ฐ O(1) |
1 | ์ฃผ์ด์ง ํค๋ก๋ถํฐ ํด์์ฝ๋ ๊ณ์ฐ |
2 | ๊ณ์ฐํ ํด์์ฝ๋๋ก๋ถํฐ ์ธ๋ฑ์ค ๊ณ์ฐ |
3 | ์ธ๋ฑ์ค ์์ ์ ์ฅ๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ ํ์ |
: ๊ท ํ์ด์งํ์ํธ๋ฆฌ๋ก ๊ตฌํ์, ํ์์๊ฐ O(logN) - ์ฆ, ํฌ๊ธฐ๊ฐ ํฐ ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ํ ๋นํด๋์ง์๊ธฐ์ ์ ์ฌ์ ์ผ๋ก ์ ์ ๊ณต๊ฐ ์ฌ์ฉํ๋ค๋ ์ฅ์ ๊ณผ ํค ์งํฉ์ ํน์ ์์ ์ฐจ๋ก๋๋ก ์ ๊ทผ๊ฐ๋ฅํ ํน์ง ์กด์ฌ
3. ArrayList์ ๊ฐ๋ณํฌ๊ธฐ๋ฐฐ์ด
: ์ธ์ด์ ๋ฐ๋ผ ๋ฐฐ์ด(List)๋ ์๋์ผ๋ก ๊ธธ์ด๋ฅผ ์กฐ์ ํ ์ ์๊ธฐ๋ํ๊ณ ์๊ธฐ๋ ํจ - Java๋ ๋ฐฐ์ด ์์ฑ์ ํฌ๊ธฐ ์ง์ ํ์
: ๋์ ๊ฐ๋ณํฌ๊ธฐ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์ฃผ๋ก ArrayList ์ฌ์ฉ - ํฌ๊ธฐ ๋ณํ ๊ฐ๋ฅ ๋ฐ ์ ๊ทผ์๊ฐ O(1)์ ์ง
: ๋ฐฐ์ด์ด ๊ฐ๋์ฐจ๋ ์๊ฐ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋ก ์ฆ๊ฐ (๊ธธ์ด๋ฅผ ๋๋ฆฌ๋ ์๊ฐ์ O(N)์ด์ง๋ง, ์ฆ์ ์ผ์ด ์๋๊ธฐ๋๋ฌธ์ ์ํ์ ๋ ฅ์๊ฐ์ผ๋ก ์ทจ๊ธํ์ฌ ๊ณ์ฐ)
ArrayList merge(String[] words, String[] more) {
ArrayList sentence=new ArrayList();
for(String w:words) {
sentence.add(w);
}
for(String m:more) {
sentence.add(m);
}
return sentence;
}
4. ์ํ์ ๋ ฅ์๊ฐ์ ์ O(1)์ด ๋๋๊ฐ?
: ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฐ๋ค๋ ๊ฒ์ ๋ฐฐ์ด ์์ ์์๋ฅผ ๋ณต์ฌํ๋ค๋ ๊ฒ
์ฆ, ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ K๋ก ๋๋ฆฌ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ด์ ์์์ ๊ฐ์ K/2๊ฐ ๋งํผ์ ์์๋ฅผ ๋ณต์ฌํด์ผ ํจ
์ด ์์ ์ ๋ฐ๋ณต์ ์ผ๋ก ์๊ฐํด๋ณด์์๋ K/2+K/4+K/8+...+1 ์ด๊ณ ์ฆ K๋ณด๋ค ์๋ค๋ ๊ฒ์ ์ ์ ์์
๊ทธ๋ฌ๋ฏ๋ก N๊ฐ์ ์์๋ฅผ ์ฝ์ ํ ๋ ์์ ์๊ฐ์ O(N)๋งํผ ์์๋๋ฉฐ ๊ฐ ์ฝ์ ์ ํ๊ท ์ ์ผ๋ก O(1)๋งํผ ์์
5. StringBuilder
๋ฌธ์์ด(String)์ ์ด์ด๋ถ์ด๋ ๊ฒฝ์ฐ ๋๊ฐ์ ๋ฌธ์์ด์ ์ฝ์ด ๋ฌธ์๋ฅผ ํ๋ํ๋ ์๋ก์ด ๋ฌธ์์ด์ ๋ณต์ฌํด์ผํจ
๊ทธ๋ฌ๋ StringBuilder๋ ๋จ์ํ๊ฒ ๊ฐ๋ณํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ํ์ํ ๊ฒฝ์ฐ์๋ง ๋ฌธ์์ด์ ๋ณต์ฌํจ
์ํ์๊ฐ์ ์ฐจ์ด๊ฐ ๋ฐ์
๋๊ธ