ํฐ์คํ ๋ฆฌ ๋ทฐ
[์ ๋ ฌ] 8. ํ ์ด๋ ์ดํดํ๋ ๊ณ์ ์ ๋ ฌ(Counting Sort)
10000COW 2022. 11. 30. 16:57๊ณ์ ์ ๋ ฌ
: ์ฃผ์ด์ง ๋ฐฐ์ด์ ๊ฐ์ ๋ฒ์๊ฐ ์์ ๊ฒฝ์ฐ ๋น ๋ฅธ ์๋๋ฅผ ๊ฐ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ต๋๊ฐ๊ณผ ์ ๋ ฅ ๋ฐฐ์ด์ ์์ ๊ฐ ๊ฐ์๋ฅผ ๋์ ํฉ์ผ๋ก ๊ตฌ์ฑํ ๋ฐฐ์ด๋ก ์ ๋ ฌ์ ์ํํ๋ค.
์ฐ์ , ์ดํดํ๊ธฐ ์ฝ๊ฒ
nums = [5, 9, 3, 6, 9, 5, 2, 10, 1] ์ด๋ผ๋ ๋ฐฐ์ด์ด ์ ๋ ฅ๋์๊ณ , ์ด nums ๋ฐฐ์ด์ ์ ๋ ฌํ๋ค๊ณ ํด๋ณด์.
์นด์ดํ ์ ๋ ฌ์ ๋จ๊ณ
0. ์ ๋ ฌํ nums ๋ฐฐ์ด ์ ๋ ฅ
1. count ๋ฐฐ์ด ์์ฑ
- ์ ๋ ฅ๋ nums ๋ฐฐ์ด์ ์ต๋๊ฐ์ ๊ธธ์ด๋ก ๊ฐ๋ count ๋ฐฐ์ด์ ์์ฑํ๋ค.
- ๊ฐ ์์๊ฐ nums ๋ฐฐ์ด์ ๋ช ๋ฒ ๋์ค๋์ง ํ์๋ฅผ count ๋ฐฐ์ด์ ๊ธฐ๋กํ๋ค.
2. ์ด์ ๊น์ง์ ๋์ ๊ฐ์๋ฅผ ๊ธฐ๋กํ๋ ๋ฐฐ์ด ์์ฑ(cumCount ๋ฐฐ์ด)
- count ๋ฐฐ์ด์์ ๊ฐ ์์๊ฐ ๋ช ๊ฐ์ฉ ๋์ค๋์ง ์ ์ ์์ผ๋ฏ๋ก,
- ์ด๋ฅผ ์ด์ฉํด ์ง๊ธ๊น์ง ๋ช๊ฐ์ ์์๊ฐ ์์ ๋์๋์ง๋ฅผ ๊ธฐ๋กํ๋ ๋์ ๊ฐ์ ๋ฐฐ์ด์ ์์ฑํ๋ค.
3. nums ๋ฐฐ์ด์์ ์ฒซ๋ฒ์งธ ์์๋ถํฐ cumCount ๋ฐฐ์ด์ ๊ธฐ๋ก๋์ด ์๋ ๊ฐ์ ๋ฐ๋ผ ์ธ๋ฑ์ค ์์น๋ฅผ ์ ํ๋ฉด ๋!
์๊ฐ ๋ณต์ก๋
:
๋ง์ฝ ์ต๋๊ฐ์ด ์ฃผ์ด์ง์ง ์์ ๊ฒฝ์ฐ, ์ ์ฒด ๋ฐฐ์ด์ ํ์ํด์ผ ํ๋ฏ๋ก O(n) ์์,
Count ๋ฐฐ์ด ์์ฑํ๋ฉด์ ๊ฐฏ์๋ฅผ ์ธ๋ ๊ณผ์ O(n) ์์,
๋์ ๋ฐฐ์ด์ ์์ฑํ๋ฉด์ ๋์ ๊ฐฏ์๋ฅผ ์ธ๋ ๊ณผ์ O(n) ์์
๋ง์ง๋ง์ผ๋ก answer์ ๋ฐฐ์ด์ ๊ฐ์ ์ ๋ ฅํ๋ ๊ณผ์ O(n) ์์
๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด ๋๋ค.
ํ์ง๋ง, ๋ฐฐ์ด์ ๊ธธ์ด์๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐ์ด์ ์ต๋๊ฐ์ M์ด๋ผ๊ณ ํ๋ค๋ฉด, ์ ๋ ฌ ์๊ฐ์ M์ ๋ฐ๋ผ๊ฐ๊ฒ ๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ O(n + M) ์ด๋ผ๊ณ ๋ณด๋ ๊ฒ์ด ์ ํํด ๋ณด์ธ๋ค.
๊ณผ์ ์์ ์ ์ ์๋ฏ์ด ์ต๋๊ฐ์ด ์์ผ๋ฉด ์์์๋ก ์ ๋ ฌ์ ์ ๋ฆฌํ๋ค.
'๐ง๐ปโ๐ป ์๊ณ ๋ฆฌ์ฆ > ์ ๋ ฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ ๋ ฌ] 7. ํ ์ด๋ ์ดํดํ๋ ๊ธฐ์ ์ ๋ ฌ(radix sort) (0) | 2022.11.30 |
---|---|
[์ ๋ ฌ] 6. ํ ์ ๋ ฌ (0) | 2022.11.30 |
[์ ๋ ฌ] 5. ํต ์ ๋ ฌ (0) | 2022.11.30 |
[์ ๋ ฌ] 2. ์ ํ ์ ๋ ฌ (0) | 2022.11.30 |
[์ ๋ ฌ] 4.๋ณํฉ์ ๋ ฌ(Merge sort) (0) | 2022.11.29 |
- Total
- Today
- Yesterday
- DOM
- useState
- ๋ฆฌ์กํธ
- Context API
- git
- ์ ๋ ฌ
- ๊ทธ๋ํ
- ์๋ฃ๊ตฌ์กฐ
- Python
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๊ณ ๋ฆฌ์ฆ
- ํจ์
- github
- DB
- ๋ธ๋ผ์ฐ์
- JavaScript
- mdn
- Browser
- zustand
- ํ์ด์ฌ
- React Query
- state
- react
- Component
- ์๋ฐ์คํฌ๋ฆฝํธ
- CSS
- leetcode
- ์๋ฌ
- BOJ
- error
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |