์ฒ์์๋ Programmers ์ด์ค์ฐ์ ์์ํ ๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ๊ณผ ๋์ผํ๊ฒ Priority Queue๋ฅผ ๋ ๊ฐ ์ ์ธํด์ ํ์๋ค. ๊ทธ๋ฌ๋๋ ์๊ฐ์ด๊ณผ ์ด์๊ฐ ๋ฌ๋ค. ์ด ๋ฌธ์ ๋ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ ์ํด ์ด์ง ํธ๋ฆฌ์ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ํ๋ฉฐ, ์ต๋๊ฐ๊ณผ ์ต์๊ฐ ๋ ๋ชจ๋์ ๋น ๋ฅธ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ผ ํ๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ฐ API์ ๋ช๋ช ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฐพ์๋ณด์๋ค.
- Priority Queue : Heap์ผ๋ก ๊ตฌํ๋์ด ์์ด ๋ฐ์ดํฐ ์ ๊ทผ์ด ๋น๊ต์ ๋น ๋ฅด์ง๋ง, ํ ์ชฝ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ ์์ด ์ต๋๊ฐ๊ณผ ์ต์๊ฐ ๋ชจ๋์ ์ ๊ทผํ๋ ค๋ฉด minHeap๊ณผ maxHeap ๋ ๊ฐ๋ฅผ ์ ์ธํ์ฌ ํ์ด์ผ ํ๊ณ , ํ ์ชฝ์์ ์ญ์ ์ฐ์ฐ์ด ์ผ์ด๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ชฝ์๋ ์ญ์ ํด์ฃผ์ด์ผ ํ๋ค.
- Deque : ๋ฑ์ฒ๋ผ ์ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ ์์์ผ๋ฉด ์ข๊ฒ ๋๋ฐ, ์๋ค๋ก ์ ๋ ฌ์ด ๋์ด์์ด์ผ ํ๋ค. ๋งค๋ฒ ์ ๋ ฌ์ ํ๊ธฐ์ O(N)์ผ๋ก ์๊ฐ๋ณต์ก๋๊ฐ ํฌ๋ค.
- TreeMap : ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ key-value ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. TreeMap์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ๋ key๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์ฌ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ TreeMap ์๋ฃ๊ตฌ์กฐ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ ์ ํฉํ๋ค๊ณ ์๊ฐํ์๋ค.
TreeMap์ ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ฌธ์ ์ ์ ๋ณด์ํ ๋ ๋-๋ธ๋ ํธ๋ฆฌ(Red-Black Tree) ๋ก ๊ตฌํ๋์ด ์๋ค. ์ผ๋ฐ์ ์ธ ์ด์ง ํ์ ํธ๋ฆฌ๋ ํธ๋ฆฌ ๋์ด๋งํผ์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฐ์ํ๋๋ฐ, ๊ฐ์ด ์ ์ฒด ํธ๋ฆฌ์ ์ ๋ถ์ฐ๋์ด ์๋ค๋ฉด ๊ด์ฐฎ์ผ๋ ํธ๋ฆฌ๊ฐ ํ ์ชฝ์ผ๋ก ์ ๋ฆด ๊ฒฝ์ฐ ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ๋ณด์ํ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ ๋-๋ธ๋ ํธ๋ฆฌ์ด๋ฉฐ, ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋๋ ์ผ์ชฝ ์์์ผ๋ก, ํฐ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋๋ ์ค๋ฅธ์ชฝ ์์์ผ๋ก ๋ฐฐ์นํ์ฌ ๋ฐ์ดํฐ์ ์ถ๊ฐ๋ ์ญ์ ์ ํธ๋ฆฌ๊ฐ ํ ์ชฝ์ผ๋ก ์ ๋ฆฌ์ง ์๋๋ก ํ๋ค.
๋ฐ๋ผ์ ์ ๋ ฌ๋ ์ํ๋ก Map์ ์ ์งํ ๋ ํจ์จ์ ์ด๋ฉฐ, ์ ๋ ฌ ๋๋ฌธ์ ์ถ๊ฐ/์ญ์ ์ฐ์ฐ ์ฑ๋ฅ์ HashMap๋ณด๋ค ๋จ์ด์ง๋ค.
- key๋ก ์ฝ์ ๋ ๋ฐ์ดํฐ๋ฅผ, value๋ก ๊ทธ ๋ฐ์ดํฐ์ ๊ฐฏ์๋ฅผ ๋ฃ์ด ๊ด๋ฆฌํ์๋ค.
- ์ต์๊ฐ ์ญ์ ์ฐ์ฐ์
map.firstKey()
๋ก, ์ต๋๊ฐ ์ญ์ ์ฐ์ฐ์map.lastKey()
๋ก ์ํํ์๋ค.