[Data Structure][์๋ฐ] ๐ ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ (Priority Queue & Heap)
๐ ๋ฐฐ์ด์ด๋?
๋ฐฐ์ด์ด๋ ์ฐ๊ด๋ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๋ค์ ํ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋ฐฐ์ด์ ์ ์ธํ์ฌ ํ๋์ ๋ณ์์ ์ฌ๋ฌ๊ฐ์ง int, String ๋ฟ๋ง ์๋๋ผ Class๋ ํ์ ์์๋ก์จ ๊ฐ์ง ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ผ์ ํ ์ฃผ์๊ฐ๊ณผ ์์ ๋ค์ด๊ฐ๋ value ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์๋ฐ์์ ๋ฐฐ์ด ์ ์ธ์ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
int[] arr = new int[100];
String[] strArr = { "Hello", "World", "1" };
๐ ๋ฆฌ์คํธ๋?
๋ฆฌ์คํธ๋ ๋ฐฐ์ด๊ณผ ๋น์ทํ์ง๋ง ๋์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋์ ์๋ฃ๊ตฌ์กฐ๋ ๋ฏธ๋ฆฌ ์ ํด์ง ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ ํด๋๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ฒ์ด ์๋๋ผ List๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค List์ ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ํ ๋นํ์ฌ ๋๋ ค๋๊ฐ๋ ๋ฐฉ์์ด๋ค.
๋ฐฐ์ด๊ณผ ๋น์ทํ๊ฒ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ ํ ์ฃผ์๊ฐ๊ณผ ์์ ๋ค์ด์๋ value ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์๋ฐ์์ ๋ฆฌ์คํธ ์ ์ธ์ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
Arraylist<Integer> list = new ArrayList<Integer>();
๐ ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ์ ์ฐจ์ด์
๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ผ๋ก๋ ๋์ ํ ๋น๊ณผ ์ ์ ํ ๋น์ ์ฐจ์ด๊ฐ ์๋ค.
๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฐฐ์ด์ ์ด๋ฏธ ์ ์ธํด๋์ ๋ฐฐ์ด ํฌ๊ธฐ์ด์์ผ๋ก ๊ฐ์ ์ถ๊ฐํ ์ ์์ง๋ง, ๋ฆฌ์คํธ๋ ๋์ ํ ๋น์ด๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ฆฌ์คํธ๊ฐ ๋ฐฐ์ด๋ณด๋ค ์๊ฐ๊ณผ ๊ณต๊ฐ์ ์ธ ์ธก๋ฉด์์ ๋นํจ์จ์ ์ด๋ฏ๋ก ๋์ ํ ๋น์ด ํ์์๋ ํฌ๊ธฐ๊ฐ ์ ํด์ ธ์๋ ํ๋ก๊ทธ๋จ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ฐฐ์ด์ ์ฐ๋ ๊ฒ์ด ์คํ๋ ค ๊ณต๊ฐ์ ์ธ ๋ถ๋ถ์์ ํจ์จ์ ์ผ ์ ์๋ค.
๐ ์ ๋ ฌ๊ณผ ํ์
// ๋ฐฐ์ด ์ ๋ ฌํ๊ธฐ (์ค๋ฆ์ฐจ์ / ๋ด๋ฆผ์ฐจ์)
Arrays.sort(arr);
Arrays.sort(arr, Arrays.reverseOrder());
// ๋ฆฌ์คํธ ์ ๋ ฌํ๊ธฐ (์ค๋ฆ์ฐจ์ / ๋ด๋ฆผ์ฐจ์)
Collections.sort(list)
Collections.sort(list, Collections.reverseOrder())
๋ง์ฝ ์์ ์ด ๋ง๋ ํด๋์ค ํ์ ์ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ๊ณ ์ถ์ผ๋ฉด ํด๋์ค ์์ ๋ค์๊ณผ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ฃผ๋ฉด ๋๋ค.
class ClassName implements Comparable{
int value;
public int compareTo(Object o){
return this.value - o.value;
}
}
int value = Arrays.binarySearch(arr, 33);
๐ ๊ด๋ จ ์์
tag:Array
tag:List
๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐