1. ๋ฒ๋ธ ์ ๋ ฌ
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ: ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ด ์ฃผ์ด์ก์ ๋, ์ด๋ป๊ฒ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ์ ์์๊น?
- 2 1 3 5
- ์์ ๊ฐ์ ๋ฐฐ์ด์ด ์์ ๋, ํฌ์ธํฐ 1์ 2๋ฅผ, ํฌ์ธํฐ 2๋ 1์ ๊ฐ๋ฆฌํจ๋ค.
- ํฌ์ธํฐ 1 > ํฌ์ธํฐ 2 ์ผ ๋, ๋ ํญ๋ชฉ์ ๊ตํํ๋ค.
- ํฌ์ธํฐ๋ค์ ํ ์นธ์ฉ ์ด๋ํ๋ฉฐ ๋ ํญ๋ชฉ์ ๋น๊ตํ๊ณ ํ์์ ๋ ํญ๋ชฉ์ ๊ตํํ๋ค.
- ์ด๋ ๊ฒ ํ ๋ฒ ๋ฐฐ์ด ์ ์ฒด๋ฅผ pass throughํ๊ณ ๋๋ฉด, ๋ค์ ๋งจ ์ผ์ชฝ์ผ๋ก ํฌ์ธํฐ๋ฅผ ์ฎ๊ฒจ ๊ตํ์ด ์ผ์ด๋์ง ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
2. ๋ฒ๋ธ ์ ๋ ฌ์ ๊ตฌํ
- ์๋ต
- ํ์ด์ฌ ์ฝ๋ ์์๋ค
3. ๋ฒ๋ธ ์ ๋ ฌ์ ํจ์จ์ฑ
- ๋ฒ๋ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์์ ์ค์ํ ๋จ๊ณ๋ ๋น๊ต์ ๊ตํ์ด๋ค.
- ๋น๊ต: ๋ฐฐ์ด ํฌ๊ธฐ๊ฐ N์ด๋ผ๊ณ ํ์ ๋, ๋น๊ต๋ N - 1 + N - 2 + N - 3 + … + 1๋ฒ ์คํ๋๋ค.
- ๊ตํ: ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด(์ต์
์ ์๋๋ฆฌ์ค)์์ ๊ตํ์ ์คํ ํ์๋ฅผ ์
๋๋ ๋น๊ตํ ๋๋ง๋ค ๊ตํ์ ์คํํด์ผ ํ๋ค. ์ฆ, ๋น๊ต์ ์คํ ํ์์ ๊ฐ๋ค.
- ์ต์
์ ์๋๋ฆฌ์ค์์ ๋น๊ต์ ๊ตํ์ ํ์๋ ๋๋ต N^2์ด๋ค.
- O(N^2)
4. ์ด์ฐจ ๋ฌธ์
- O(N^2) ์๊ณ ๋ฆฌ์ฆ์ O(N) ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋์ฒดํ ์ ์์๊น?
- ์ซ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ์ค๋ณต๋๋ ์ซ์๊ฐ ๋ค์ด ์๋์ง ํ์ธํ๋ ํจ์
- for(i in 0 until list.size){ for(j in i + 1 until list.size){ if(list[i] == list[j]){ return true } } } return false
- ์ ์ฝ๋๋ O(N^2) ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
5. ์ ํ ํด๊ฒฐ๋ฒ
var existingNum = IntArray()
for (i in 0 until arr.size){
if(existingNum[arr[i]] == 1)
return true
else
existingNum[arr[i]] = 1
}
return false
- existingNum์ด๋ผ๋ ๋ฐฐ์ด์ ์ค๋ณต ์ฌ๋ถ๋ฅผ ํ์ํ๊ฒ ํ๋ค.
- ์ ์ฝ๋๋ O(N) ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
6. ๋ง๋ฌด๋ฆฌ
- ๋น
์ค ํ๊ธฐ๋ฒ์ ๋๋ถ๋ถ์ ์๊ณ ๋ฆฌ์ฆ์ ์๋๋ฅผ ๋น๊ตํ๊ณ ํ๋ณํ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ๋น
์ค ํ๊ธฐ๋ฒ์ผ๋ก ํ๋ณ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ค.
- 5์ฅ์์๋ ๋น
์ค ํ๊ธฐ๋ฒ์ผ๋ก๋ ์ ์๋ฏธํ ์ฐจ์ด๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ์ด๋ป๊ฒ ํ๋จํ๋์ง ์ดํด๋ณธ๋ค.