1. PriorityQueue(ì°ì ìì í) íŽëì€ ìê°
ì°ì ìì íë ë°ìŽí°ì ì²ëŠ¬ ìì륌 ì°ì ììì ë°ëŒ ê²°ì íë ìë£êµ¬ì¡°ì ëë€. ìŒë°ì ìž íì ë¬ëŠ¬, ì°ì ììê° ëì ììê° ëšŒì ì²ëŠ¬ëë í¹ì§ìŽ ììµëë€. Javaììë PriorityQueue íŽëì€ë¥Œ ì ê³µíì¬ ì°ì ìì í륌 구íí ì ììµëë€.
PriorityQueue íŽëì€ì í¹ì§
- ì°ì ììì ë°ëŒ ìì륌 ì ë ¬íê³ êŽëŠ¬í©ëë€.
- ëŽë¶ìì ìŽì§ í(binary heap)ì ì¬ì©íì¬ ìì륌 ì ì¥í©ëë€. ìŽì§ íì ë¶ëªš ë žëê° ìì ë žëë³Žë€ íì ì°ì ììê° ëì ìì ìŽì§ ížëŠ¬ì ëë€.
- ììë Ʞ볞ì ìŒë¡ Comparable ìží°íìŽì€ë¥Œ 구íí ê°ì²Žì ìíŽ ì ë ¬ë©ëë€. Comparable ìží°íìŽì€ë¥Œ 구ííì§ ìì 겜ì°, ìì륌 ì¶ê°í ë Comparator ìží°íìŽì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì§ì í ì ììµëë€.
- ì€ë³µë ìì륌 íì©íë©°, ì€ë³µë ìì륌 ì¶ê°í ì ììµëë€. ëš, ì€ë³µë ììê° ì ê±°ëë ìì ì ì§ì ì²ëŠ¬íŽìŒ í©ëë€.
PriorityQueue íŽëì€ì íì© ë°©ë²
- PriorityQueue ê°ì²Žë¥Œ ìì±í©ëë€.
- ìì륌 ì¶ê°í ëë
offer()
ë©ìë륌 ì¬ì©í©ëë€. ìŽ ë©ìëë ìì륌 ì°ì ììì ë§ê² ì ë ¬íì¬ ì ì í ìì¹ì ìœì í©ëë€. - ì°ì ììê° ê°ì¥ ëì ìì륌 ê°ì žì€ê³ ì¶ì ëë
poll()
ë©ìë륌 ì¬ì©í©ëë€. ìŽ ë©ìëë ì°ì ììê° ê°ì¥ ëì ìì륌 ì ê±°íê³ ë°íí©ëë€. - ì°ì ììê° ê°ì¥ ëì ìì륌 íìžíê³ ì¶ì ëë
peek()
ë©ìë륌 ì¬ì©í©ëë€. ìŽ ë©ìëë ì°ì ììê° ê°ì¥ ëì ìì륌 ë°ííì§ë§, ì ê±°íì§ë ììµëë€. - ì°ì ìì íì í¬êž°ë¥Œ ë°ííê³ ì¶ì ëë
size()
ë©ìë륌 ì¬ì©í©ëë€.
PriorityQueue íŽëì€ë ë€ìí ìí©ìì ì¬ì©ë ì ììŒë©°, ìì ì€ìŒì€ë§, ìŽë²€íž ì²ëŠ¬, ìµì ì ì¥ ížëŠ¬ ìê³ ëŠ¬ìŠ ë±ì íì©ë ì ììµëë€. ë€ì í목ììë PriorityQueue íŽëì€ì ìì± ë° ìŽêž°í ë°©ë²ì ëíŽ ììží ììë³Žê² ìµëë€.
1. ì°ì ìì í ê°ë ì€ëª
ì°ì ìì íë ë°ìŽí°ë¥Œ ì ì¥íê³ êŽëŠ¬íë ìë£êµ¬ì¡°ë¡, ììì ì²ëŠ¬ ìì륌 ì°ì ììì ë°ëŒ ê²°ì íë í¹ì§ì ê°ì§ê³ ììµëë€. ìŒë°ì ìž íìë ë¬ëŠ¬, ì°ì ììê° ëì ììê° ëšŒì ì²ëŠ¬ëë í¹ì§ì ê°ì§ê³ ììµëë€.
ë°ìŽí°ë¥Œ ìœì í ëë ì°ì ììì ë§ê² ì ë ¬íì¬ ìœì íê³ , ë°ìŽí°ë¥Œ ì ê±°í ëë ì°ì ììê° ê°ì¥ ëì ë°ìŽí°ë¥Œ 뚌ì ì ê±°í©ëë€. ìŽë ê² ì°ì ììì ë°ëŒ ì²ëŠ¬íë ê²ì ë€ìí ìí©ìì ì ì©í©ëë€. ì륌 ë€ìŽ, ìì ì€ìŒì€ë§ììë ì°ì ììê° ëì ìì ì 뚌ì ì²ëŠ¬íê³ , ìŽë²€íž ì²ëŠ¬ììë ì°ì ììê° ëì ìŽë²€ížë¥Œ ì°ì ì ìŒë¡ ì²ëŠ¬íë ë±ì ìí©ìì íì©ë©ëë€.
ì°ì ìì íë ëŽë¶ì ìŒë¡ ìŽì§ í(binary heap)ìŽëŒë ìë£êµ¬ì¡°ë¥Œ ì¬ì©íì¬ êµ¬íë©ëë€. ìŽì§ íì ë¶ëªš ë žëê° ìì ë žëë³Žë€ ì°ì ììê° ëì ìì ìŽì§ ížëŠ¬ì ëë€. ë°ëŒì ììì ì¶ê°ë ì ê±° ìê° ë³µì¡ëë O(log N)ì ëë€.
Javaììë PriorityQueue íŽëì€ë¥Œ ì ê³µíì¬ ì°ì ìì í륌 ìœê² 구íí ì ììµëë€. PriorityQueue íŽëì€ë ììì ì¶ê°, ì ê±°, ì¡°í ë±ì ë€ìí êž°ë¥ì ì ê³µíë©°, ì°ì ìì륌 ì§ì íê±°ë ìì륌 ë¹êµíë ë°©ìì ì íí ì ììµëë€. ë€ì í목ììë PriorityQueue íŽëì€ì ìì± ë° ìŽêž°í ë°©ë²ì ëíŽ ììží ììë³Žê² ìµëë€.
2. PriorityQueue íŽëì€ì í¹ì§ê³Œ íì© ë°©ë² ìê°
PriorityQueue íŽëì€ë Javaìì ì°ì ìì í륌 구ííêž° ìíŽ ì ê³µëë íŽëì€ì ëë€. PriorityQueue íŽëì€ë ë€ì곌 ê°ì í¹ì§ì ê°ì§ê³ ììµëë€.
PriorityQueue íŽëì€ì í¹ì§
- ìì륌 ì°ì ììì ë°ëŒ ì ë ¬íê³ êŽëŠ¬í©ëë€.
- ëŽë¶ì ìŒë¡ ìŽì§ í(binary heap)ì ì¬ì©íì¬ ìì륌 ì ì¥í©ëë€. ìŽì§ íì ë¶ëªš ë žëê° ìì ë žëë³Žë€ íì ì°ì ììê° ëì ìì ìŽì§ ížëŠ¬ì ëë€.
- Ʞ볞ì ìŒë¡ Comparable ìží°íìŽì€ë¥Œ 구íí ê°ì²Žì ìíŽ ììê° ì ë ¬ë©ëë€. Comparable ìží°íìŽì€ë¥Œ 구ííì§ ìì 겜ì°, Comparator ìží°íìŽì€ë¥Œ 구íí ê°ì²Žë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì§ì í ì ììµëë€.
- ì€ë³µë ìì륌 íì©íê³ , ì€ë³µë ìì륌 ì¶ê°í ì ììµëë€. ëš, ì€ë³µë ììê° ì ê±°ëë ìì ì ì§ì ì²ëŠ¬íŽìŒ í©ëë€.
PriorityQueue íŽëì€ì íì© ë°©ë²
- PriorityQueue ê°ì²Žë¥Œ ìì±í©ëë€. ìëì ìœëì ê°ìŽ ì°ì ìì í륌 ìì±í ì ììµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
- ì°ì ìì íì ìì륌 ì¶ê°íê³ ì¶ì ëë
offer()
ë©ìë륌 ì¬ì©í©ëë€. ì°ì ìì íë ìì륌 ì°ì ììì ë§ê² ì ë ¬íŽìŒ íêž° ë묞ìoffer()
ë©ìë륌 ì¬ì©íì¬ ìì륌 ìœì í©ëë€.
pq.offer(5);
pq.offer(2);
pq.offer(8);
- ì°ì ììê° ê°ì¥ ëì ìì륌 ê°ì žì€ê³ ì¶ì ëë
poll()
ë©ìë륌 ì¬ì©í©ëë€.poll()
ë©ìëë ì°ì ììê° ê°ì¥ ëì ìì륌 ì ê±°íê³ ë°íí©ëë€.
int highestPriority = pq.poll(); // 2
- ì°ì ììê° ê°ì¥ ëì ìì륌 íìžíê³ ì¶ì ëë
peek()
ë©ìë륌 ì¬ì©í©ëë€.peek()
ë©ìëë ì°ì ììê° ê°ì¥ ëì ìì륌 ë°ííì§ë§, ì ê±°íì§ë ììµëë€.
int highestPriority = pq.peek(); // 2
- ì°ì ìì íì í¬êž°ë¥Œ ë°ííê³ ì¶ì ëë
size()
ë©ìë륌 ì¬ì©í©ëë€. ìëì ìœëì ê°ìŽ ì°ì ìì íì í¬êž°ë¥Œ íìží ì ììµëë€.
int size = pq.size();
PriorityQueue íŽëì€ë ë€ìí ìí©ìì íì©ë ì ììµëë€. ì륌 ë€ìŽ, ìì ì€ìŒì€ë§, ìŽë²€íž ì²ëŠ¬, ìµì ì ì¥ ížëŠ¬ ìê³ ëŠ¬ìŠ ë±ìì ì°ì ìì íê° íì©ë ì ììµëë€.
2. PriorityQueue íŽëì€ì í¹ì§ê³Œ íì© ë°©ë² ìê°
ì°ì ìì íë ë°ìŽí°ë¥Œ ì ì¥íê³ êŽëŠ¬íë ìë£êµ¬ì¡°ë¡, ììì ì²ëŠ¬ ìì륌 ì°ì ììì ë°ëŒ ê²°ì íë í¹ì§ì ê°ì§ê³ ììµëë€. Javaììë PriorityQueue íŽëì€ë¥Œ ì ê³µíì¬ ì°ì ìì í륌 ìœê² 구íí ì ììµëë€. ìëììë PriorityQueue íŽëì€ì í¹ì§ê³Œ íì© ë°©ë²ì ëíŽ ììží ììë³Žê² ìµëë€.
PriorityQueue íŽëì€ì í¹ì§
ììì ì ë ¬ ë° êŽëŠ¬: PriorityQueue íŽëì€ë ìì륌 ì°ì ììì ë°ëŒ ì ë ¬íì¬ ì ì¥íê³ êŽëŠ¬í©ëë€. ìŽì§ í(binary heap)ìŽëŒë ìë£êµ¬ì¡°ë¥Œ ëŽë¶ì ìŒë¡ ì¬ì©íì¬ ìì륌 ì ì¥íë©°, ë¶ëªš ë žëê° ìì ë žëë³Žë€ ì°ì ììê° ëì ìì ìŽì§ ížëŠ¬ì ëë€.
Comparable ë° Comparator ìží°íìŽì€ ì§ì: PriorityQueue íŽëì€ë Ʞ볞ì ìŒë¡ Comparable ìží°íìŽì€ë¥Œ 구íí ê°ì²Žì ìíŽ ììë€ìŽ ì ë ¬ë©ëë€. Comparable ìží°íìŽì€ë¥Œ 구ííì§ ìì 겜ì°, Comparator ìží°íìŽì€ë¥Œ 구íí ê°ì²Žë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì§ì í ì ììµëë€.
ì€ë³µë ìì íì©: PriorityQueue íŽëì€ë ì€ë³µë ìì륌 íì©í©ëë€. ë°ëŒì ì€ë³µë ìì륌 ì¶ê°í ì ììŒë©°, ì€ë³µë ììê° ì ê±°ëë ìì ì ì§ì ì²ëŠ¬íŽìŒ í©ëë€.
PriorityQueue íŽëì€ì íì© ë°©ë²
ì°ì ìì í ìì±: PriorityQueue íŽëì€ë¥Œ ì¬ì©íì¬ ì°ì ìì í ê°ì²Žë¥Œ ìì±í©ëë€. ìëì ìœëì ê°ìŽ ìì±í ì ììµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
ìì ì¶ê°:
offer()
ë©ìë륌 ì¬ì©íì¬ ì°ì ìì íì ìì륌 ì¶ê°í©ëë€. ì°ì ììê° ëì ììëë¡ ì ë ¬ëë¯ë¡, ì ë ¬ìŽ íìí 겜ì°ìëoffer()
ë©ìë륌 ì¬ì©í©ëë€.pq.offer(5); pq.offer(2); pq.offer(8);
ì°ì ììê° ê°ì¥ ëì ìì ì ê±° ë° ë°í:
poll()
ë©ìë륌 ì¬ì©íì¬ ì°ì ììê° ê°ì¥ ëì ìì륌 ì ê±°íê³ ë°íí©ëë€.int highestPriority = pq.poll(); // 2
ì°ì ììê° ê°ì¥ ëì ìì íìž:
peek()
ë©ìë륌 ì¬ì©íì¬ ì°ì ììê° ê°ì¥ ëì ìì륌 íìží©ëë€. ìŽë, ììë ì ê±°ëì§ ììµëë€.int highestPriority = pq.peek(); // 2
íì í¬êž° íìž:
size()
ë©ìë륌 ì¬ì©íì¬ ì°ì ìì íì í¬êž°ë¥Œ íìží ì ììµëë€.int size = pq.size();
PriorityQueue íŽëì€ë ë€ìí ìí©ìì íì©ë ì ììµëë€. ìì ì€ìŒì€ë§, ìŽë²€íž ì²ëŠ¬, ìµì ì ì¥ ížëŠ¬ ìê³ ëŠ¬ìŠ ë±ìì ì°ì ìì í륌 íì©í ì ììŒë©°, íšìšì ìž ë°ìŽí° êŽëŠ¬ì ì²ëŠ¬ë¥Œ ìíŽ ì¬ì©ë©ëë€.
2. PriorityQueue íŽëì€ ìì± ë° ìŽêž°í
PriorityQueue íŽëì€ë¥Œ ì¬ì©íì¬ ì°ì ìì í ê°ì²Žë¥Œ ìì±íê³ ìŽêž°ííë ë°©ë²ì ëíŽ ììë³Žê² ìµëë€.
ì°ì ìì í륌 ìì±íë €ë©Ž PriorityQueue íŽëì€ì ìžì€íŽì€ë¥Œ ë§ë€ìŽìŒ í©ëë€. PriorityQueue ê°ì²Žë¥Œ ìì±íë ë°©ë²ì ìëì ìœëì ê°ìµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
ìì ìœëë Integer íì ì ìì륌 ê°ì§ë ì°ì ìì í ê°ì²Žë¥Œ ìì±íë ììì ëë€. ì°ì ìì í륌 ë€ë¥ž íì ì ììë¡ ìì±íë €ë©Ž <E> ëì íŽë¹ íì ì ì¬ì©íë©Ž ë©ëë€. ì륌 ë€ìŽ, 묞ììŽ ì°ì ìì í륌 ìì±íë €ë©Ž ìëì ìœëì ê°ìŽ ìì±í©ëë€.
PriorityQueue<String> pq = new PriorityQueue<>();
ìŽë ê² PriorityQueue ê°ì²Žë¥Œ ìì±í íìë ìì륌 ìŽêž°ííê³ ì¶ê°í ì ììµëë€. ìì륌 ì¶ê°íë ë°©ë²ì offer()
ë©ìë륌 ì¬ì©íë ê²ì
ëë€. offer()
ë©ìë륌 ížì¶íì¬ ìì륌 ì¶ê°íë©Ž, ìëìŒë¡ ì°ì ììì ë°ëŒ ì ë ¬ë©ëë€. ìëì ìœëë ì°ì ìì íì ìì륌 ì¶ê°íë ììì
ëë€.
pq.offer(5);
pq.offer(2);
pq.offer(8);
ìì ìœëììë ì«ì 5, 2, 8ì ì°ì ìì íì ì¶ê°íê³ ììµëë€. ìì륌 ì¶ê°íë©Ž ì°ì ìì íë ìëìŒë¡ ì ë ¬íì¬ ë€ì곌 ê°ìŽ ìì륌 ì ì¥í©ëë€.
2, 5, 8
ìŽêž°í ë° ìì ì¶ê°ë¥Œ ìë£í ë€ìë ì°ì ìì í륌 íì©íì¬ ìì
ì ìíí ì ììµëë€. ìì ìœëìì ì°ì ìì í ê°ì²Ž pq
륌 ì¬ì©íì¬ ë€ìí ìì
ì ì§íí ì ììµëë€.
- PriorityQueue ê°ì²Ž ìì±íêž°
PriorityQueue íŽëì€ë¥Œ ì¬ì©íì¬ ì°ì ìì í ê°ì²Žë¥Œ ìì±íë 곌ì ì ëíŽ ììë³Žê² ìµëë€.
ì°ì ìì í륌 ìì±íë €ë©Ž PriorityQueue íŽëì€ì ìžì€íŽì€ë¥Œ ë§ë€ìŽìŒ í©ëë€. PriorityQueue ê°ì²Žë¥Œ ìì±íë ë°©ë²ì ìëì ìœëì ê°ìµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
ìì ìœëë Integer íì ì ìì륌 ê°ì§ë ì°ì ìì í ê°ì²Žë¥Œ ìì±íë ììì ëë€. íì ì <E> ì늬ì íŽë¹íë ë¶ë¶ì ì ì í íì ì ë£ìŽì£Œë©Ž ë©ëë€. ì륌 ë€ìŽ, 묞ììŽ ì°ì ìì í륌 ìì±íë €ë©Ž ìëì ìœëì ê°ìŽ ìì±í©ëë€.
PriorityQueue<String> pq = new PriorityQueue<>();
ìŽë° ììŒë¡ ì°ì ìì í ê°ì²Žë¥Œ ìì±íë©Ž, ì°ì ìì íê° êž°ë³žì ìŒë¡ ì ë ¬ë ìíë¡ ìŽêž°íë©ëë€.
ì°ì ìì í ê°ì²Žë¥Œ ìŽêž°íí íìë offer()
ë©ìë륌 ì¬ì©íì¬ ìì륌 ì¶ê°í ì ììµëë€. ìëì ìœëë ì°ì ìì íì ìì륌 ì¶ê°íë ììì
ëë€.
pq.offer(5);
pq.offer(2);
pq.offer(8);
ìì ìœëììë ì«ì 5, 2, 8ì ì°ì ìì íì ì¶ê°íê³ ììµëë€. ìì륌 ì¶ê°íë©Ž ì°ì ìì íë ìëìŒë¡ ì ë ¬íì¬ ìì륌 ì ì¥í©ëë€.
ìŽë ê² ìŽêž°í ë° ìì ì¶ê°ë¥Œ ìë£í ë€ìë ì°ì ìì í륌 íì©íì¬ ë€ìí ìì
ì ìíí ì ììµëë€. ìì ìœëìì ì°ì ìì í ê°ì²Ž pq
륌 ì¬ì©íì¬ ë€ì ìì
ì ì§íí ì ììµëë€.
- ì°ì ìì íì ìì ì¶ê°íêž°
ì°ì ìì íì ìì륌 ì¶ê°íë ë°©ë²ì ëíŽ ììë³Žê² ìµëë€.
ìì륌 ì¶ê°íêž° ìíŽìë offer()
ë©ìë륌 ì¬ì©í©ëë€. ì°ì ìì íì ìì륌 ì¶ê°íë©Ž, íŽë¹ ììë ì°ì ììì ë°ëŒ ìëìŒë¡ ì ë ¬ë©ëë€.
ìëì ìœëë ì°ì ìì íì ìì륌 ì¶ê°íë ììì ëë€.
pq.offer(5);
pq.offer(2);
pq.offer(8);
ìì ìœëììë ì«ì 5, 2, 8ì ì°ì ìì íì ì¶ê°íê³ ììµëë€. offer()
ë©ìë륌 ížì¶íì¬ ê° ì«ì륌 ì°ì ìì íì ì¶ê°íë©Ž, ì°ì ììì ë°ëŒ ìëìŒë¡ ì ë ¬ë©ëë€.
ê·žë¬ë©Ž ì°ì ìì íì ììê° ìŽë»ê² ì ì¥ëëì§ ìŽíŽë³Žê² ìµëë€. ìì ìœëìì ì«ì 5, 2, 8ì ì¶ê°í í ì°ì ìì íì ì ì¥ë ììë ë€ì곌 ê°ìµëë€.
2, 5, 8
ì°ì ìì íì ììë ìì ê°ë¶í° í° ê°ì ììë¡ ì ì¥ëë©°, ëìŒí ì°ì ìì륌 ê°ì§ ììë€ì ì ì¥ ììì ë°ëŒ ì ë ¬ë©ëë€.
ë°ëŒì, ì°ì ìì íì ìì륌 ì¶ê°íêž° ìíŽìë offer()
ë©ìë륌 ì¬ì©íë©Ž ë©ëë€. ìŽë¥Œ íµíŽ ì°ì ììì ë°ëŒ ìëìŒë¡ ì ë ¬ë ììë€ìŽ ì ì¥ë ê²ì
ëë€.
- ì°ì ìì í ìì ì ê·Œíêž°
ì°ì ìì íì ì ì¥ë ììì ì ê·Œíë ë°©ë²ì ëíŽ ììë³Žê² ìµëë€.
ì°ì ìì íììë ê°ì¥ ì°ì ììê° ëì ìì륌 ì쪜ììë¶í° ì°šë¡ëë¡ ì ê·Œí ì ììµëë€. ë°ëŒì, poll()
ë©ìë륌 ì¬ì©íì¬ ì°ì ììê° ê°ì¥ ëì ìì륌 ê°ì žì¬ ì ììµëë€. ê°ì žìš ììë ì°ì ìì íìì ìì ëë©°, ë€ì ì°ì ììê° ëì ììê° ì ê·Œ ê°ë¥íŽì§ëë€.
ìëì ìœëë ì°ì ìì íìì ìì륌 ì ê·Œíë ììì ëë€.
int firstElement = pq.poll();
int secondElement = pq.poll();
ìì ìœëììë ì°ì ìì íìì poll()
ë©ìë륌 ë ë² ížì¶íì¬ ìì륌 ê°ì žì€ê³ ììµëë€. 첫 ë²ì§ž ížì¶ì ì°ì ììê° ê°ì¥ ëì ìì륌 ê°ì žì€ê³ , ë ë²ì§ž ížì¶ì ë€ììŒë¡ ì°ì ììê° ëì ìì륌 ê°ì žìµëë€. ìŽë ê² ê°ì žìš ììë ì°ì ìì íìì ìì ëë¯ë¡, ë€ì poll()
ë©ìë륌 ížì¶íë©Ž ê·ž ë€ì ì°ì ììê° ëì ììê° ì ê·Œ ê°ë¥íŽì§ëë€.
ì ê·Œí ìì륌 íì©íêž° ìíŽìë ë³ìì ì ì¥íì¬ ì¬ì©íë©Ž ë©ëë€. ìì ìœëììë firstElement
ë³ìì secondElement
ë³ìì ê°ê° 첫 ë²ì§žì ë ë²ì§žë¡ ê°ì žìš ììê° ì ì¥ë©ëë€.
ë°ëŒì, ì°ì ìì íìì ìì륌 ì ê·Œíêž° ìíŽìë poll()
ë©ìë륌 ì¬ì©íì¬ ì°ì ììê° ê°ì¥ ëì ìì륌 ê°ì žì€ë©Ž ë©ëë€. ìŽë ê² ì ê·Œí ììë ì¬ì©ìê° ìíë ë°©ììŒë¡ íì©í ì ììµëë€.
- ì°ì ìì í ìì ì ê·Œíêž°
ì°ì ìì íìì ììì ì ê·Œíë ë°©ë²ì ëíŽ ììë³Žê² ìµëë€.
ì°ì ìì íë ê°ì¥ ì°ì ììê° ëì ììë¶í° ì°šë¡ëë¡ ì ê·Œí ì ììµëë€. ìŽë¥Œ ìíŽ poll()
ë©ìë륌 ì¬ì©í©ëë€. poll()
ë©ìëë ì°ì ììê° ê°ì¥ ëì ìì륌 ê°ì žì€ê³ , íŽë¹ ììë ì°ì ìì íìì ìì ë©ëë€. ê·žëŠ¬ê³ ë€ììŒë¡ ì°ì ììê° ëì ììê° ì ê·Œ ê°ë¥íŽì§ëë€.
ìëì ìœëë ì°ì ìì íìì ìì륌 ì ê·Œíë ììì ëë€.
int firstElement = pq.poll();
int secondElement = pq.poll();
ìì ììììë poll()
ë©ìë륌 ë ë² ížì¶íì¬ ìì륌 ê°ì žì€ê³ ììµëë€. 첫 ë²ì§ž ížì¶ì ì°ì ììê° ê°ì¥ ëì ìì륌 ê°ì žì€ê³ , ë ë²ì§ž ížì¶ì ë€ììŒë¡ ì°ì ììê° ëì ìì륌 ê°ì žìµëë€. ìŽë ê² ê°ì žìš ììë ì°ì ìì íìì ìì ëë¯ë¡, ë€ì poll()
ë©ìë륌 ížì¶íë©Ž ê·ž ë€ì ì°ì ììê° ëì ììê° ì ê·Œ ê°ë¥íŽì§ëë€.
ì ê·Œí ìì륌 íì©íêž° ìíŽìë ë³ìì ì ì¥íì¬ ì¬ì©íë©Ž ë©ëë€. ìì ìœëììë firstElement
ë³ìì secondElement
ë³ìì ê°ê° 첫 ë²ì§žì ë ë²ì§žë¡ ê°ì žìš ììê° ì ì¥ë©ëë€.
ë°ëŒì, ì°ì ìì íìì ìì륌 ì ê·Œíêž° ìíŽìë poll()
ë©ìë륌 ì¬ì©íì¬ ì°ì ììê° ê°ì¥ ëì ìì륌 ê°ì žì€ë©Ž ë©ëë€. ìŽë ê² ì ê·Œí ììë ì¬ì©ìê° ìíë ë°©ììŒë¡ íì©í ì ììµëë€.
3. PriorityQueue íŽëì€ì 죌ì ë©ìë
PriorityQueue íŽëì€ë ì°ì ìì í륌 구íí íŽëì€ì ëë€. ìŽ íŽëì€ìë ì¬ë¬ ê°ì§ 죌ì ë©ìëê° ììµëë€. ê° ë©ìëì ëíŽ ììží ììë³Žê² ìµëë€.
3.1 add(element) / offer(element)
add(element)
ëë offer(element)
ë©ìëë ì°ì ìì íì ìì륌 ì¶ê°íë ìí ì í©ëë€. ìŽ ë©ìëë ìì륌 ì°ì ììì ë§ê² ì ë ¬íì¬ íì ìœì
í©ëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(5);
pq.offer(10);
ìì ììììë add()
ì offer()
ë©ìë륌 ì¬ì©íì¬ ì°ì ìì íì ìì륌 ì¶ê°íê³ ììµëë€. 첫 ë²ì§ž ížì¶ì 5륌, ë ë²ì§ž ížì¶ì 10ì ì°ì ìì íì ìœì
í©ëë€.
3.2 poll()
poll()
ë©ìëë ì°ì ìì íìì ê°ì¥ ì°ì ììê° ëì ìì륌 ì ê±°íê³ ê°ì žìµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(10);
int highestPriority = pq.poll();
ìì ììììë poll()
ë©ìë륌 ížì¶íì¬ ì°ì ìì íìì ê°ì¥ ì°ì ììê° ëì ìì륌 ê°ì žì€ê³ ììµëë€. ìŽë, íŽë¹ ììë ì°ì ìì íìì ì ê±°ë©ëë€. ë°ëŒì, highestPriority
ë³ììë 10ìŽ ì ì¥ë ê²ì
ëë€.
3.3 peek()
peek()
ë©ìëë ì°ì ìì íìì ê°ì¥ ì°ì ììê° ëì ìì륌 ê°ì žì€ë, ì ê±°íì§ë ììµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(10);
int highestPriority = pq.peek();
ìì ììììë peek()
ë©ìë륌 ížì¶íì¬ ì°ì ìì íìì ê°ì¥ ì°ì ììê° ëì ìì륌 ê°ì žì€ê³ ììµëë€. ìŽë, íŽë¹ ììë ì°ì ìì íìì ì ê±°ëì§ ììµëë€. ë°ëŒì, highestPriority
ë³ììë 10ìŽ ì ì¥ë ê²ì
ëë€.
3.4 remove(element)
remove(element)
ë©ìëë ì°ì ìì íìì í¹ì ìì륌 ì ê±°í©ëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(10);
pq.remove(10);
ìì ììììë remove()
ë©ìë륌 ì¬ì©íì¬ ì°ì ìì íìì ì«ì 10ì ì ê±°íê³ ììµëë€.
3.5 size()
size()
ë©ìëë ì°ì ìì íì ì ì¥ë ììì ê°ì륌 ë°íí©ëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(10);
int size = pq.size();
ìì ììììë size()
ë©ìë륌 ížì¶íì¬ ì°ì ìì íì ì ì¥ë ììì ê°ì륌 ê°ì žì ë³ìì ì ì¥íê³ ììµëë€.
ì°ì ìì í íŽëì€ì 죌ì ë©ìëì ëíŽ ìì볎ììµëë€. ìŽë¬í ë©ìëë€ì ì ì í íì©íì¬ ì°ì ìì í륌 ë€ìí ìí©ì ë§ê² ì¬ì©í ì ììµëë€.
- offer() ë©ìë: ìì ì¶ê°íêž°
offer()
ë©ìëë ì°ì ìì íì ìì륌 ì¶ê°íë ìí ì í©ëë€. ìŽ ë©ìëë íì ìì륌 ìœì
íê³ , ì°ì ììì ë§ê² ìì륌 ì ë ¬í©ëë€.
ì¬ì©ë²
offer()
ë©ìëë ìëì ê°ìŽ ì¬ì©í ì ììµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(10);
ìì ììììë pq
ëŒë ìŽëŠì ì°ì ìì í ê°ì²Žë¥Œ ìì±íê³ , offer()
ë©ìë륌 ì¬ì©íì¬ 5ì 10ìŽëŒë ë ê°ì ìì륌 ì°ì ìì íì ì¶ê°íê³ ììµëë€.
ìë ì늬
offer()
ë©ìëë ìë¡ìŽ ìì륌 ì°ì ìì íì ìœì
íê³ , ëŽë¶ì ìŒë¡ ìì륌 ì°ì ììì ë§ê² ì¬ì ë ¬í©ëë€. ìŽ ë, ìì륌 ì ë ¬íë ë°©ìì ì°ì ìì íì 구í ë°©ìì ë°ëŒ ë€ë¥Œ ì ììµëë€. ë³Žíµ ì°ì ìì íë ìŽì§ í(Binary Heap) ìë£êµ¬ì¡°ë¥Œ ì¬ì©íì¬ êµ¬íë©ëë€. ìë¡ìŽ ìì륌 ìœì
íì ë, ì°ì ììì ë°ëŒ ìì륌 ì¬ë°°ì¹íì¬ íì ê·ì¹ì ì ì§í©ëë€.
ì륌 ë€ìŽ, ì°ì ìì íì ìì륌 ìœì íë 곌ì ì ìëì ê°ìµëë€.
- ìë¡ìŽ ìì륌 íì ëì ì¶ê°í©ëë€.
- ìì륌 ìì ë žëì ë¹êµíì¬ ì°ì ììì ë§ì¶ìŽ ì¬ë°°ì¹í©ëë€.
- íìì ë°ëŒ ììë€ì ìì¹ë¥Œ ë°ê¿ê°ë©° íì ê·ì¹(ì°ì ìì ìì)ì ì ì§í©ëë€.
- íì ììê° ì¶ê°ëë©Ž íì í¬êž°ê° ëìŽëê³ , ììë€ì ì¬ë°°ì¹ê° íìíë¯ë¡, ìì ì ìê° ë³µì¡ëë O(logN)ì ëë€.
ë°íê°
offer()
ë©ìëë ì€ë¥ê° ë°ìíì§ ìê³ íì true
륌 ë°íí©ëë€. ë°ëŒì, ë³ëì ììž ì²ëŠ¬ë ë°í 결곌륌 íìží íìê° ììµëë€. ë§ìœ ì°ì ìì íì í¬êž°ê° ì íëìŽ ìë 겜ì°(maximum capacity), ìì륌 ì¶ê°íì§ ëª»í ë false
륌 ë°ííë 겜ì°ë ìì ì ììµëë€.
offer()
ë©ìë륌 ì¬ì©íì¬ ìì륌 ì°ì ìì íì ì¶ê°í ëë, ì°ì ììì ë°ëŒ ììê° ì ë ¬ëê³ íì ìœì
ëë€ë ì ì ì ìíŽìŒ í©ëë€. ìŽë¥Œ íµíŽ ì°ì ìì íì êž°ë¥ì íšê³Œì ìŒë¡ íì©í ì ììµëë€.
- poll() ë©ìë: ì°ì ììê° ê°ì¥ ëì ìì ì ê±°íêž°
poll()
ë©ìëë ì°ì ìì íìì ê°ì¥ ì°ì ììê° ëì ìì륌 ì ê±°íê³ ë°íí©ëë€.
ì¬ì©ë²
poll()
ë©ìëë ìëì ê°ìŽ ì¬ì©í ì ììµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(10);
int highestPriority = pq.poll();
ìì ììììë pq
ëŒë ìŽëŠì ì°ì ìì í ê°ì²Žë¥Œ ìì±íê³ , offer()
ë©ìë륌 ì¬ì©íì¬ 5ì 10ì ì°ì ìì íì ì¶ê°íê³ ììµëë€. ê·žëŠ¬ê³ poll()
ë©ìë륌 ížì¶íì¬ ê°ì¥ ì°ì ììê° ëì ìì륌 ê°ì žìµëë€. ìŽë, íŽë¹ ììë ì°ì ìì íìì ì ê±°ë©ëë€.
ìë ì늬
poll()
ë©ìëë ì°ì ìì íìì ê°ì¥ ì°ì ììê° ëì ìì륌 ë°ííê³ , íŽë¹ ìì륌 íìì ì ê±°í©ëë€. ëŽë¶ì ìŒë¡ë íìì ìµìì ë
žë(ê°ì¥ ì°ì ììê° ëì ìì)륌 ì ê±°íëë¡ êµ¬íë©ëë€.
ì륌 ë€ìŽ, ì°ì ìì íì poll()
ë©ìë륌 ížì¶íë 곌ì ì ìëì ê°ìµëë€.
- ì°ì ìì íìì ê°ì¥ ì°ì ììê° ëì ìì(ìµìì ë žë)륌 ê°ì žìµëë€.
- ìµìì ë žë륌 ì ê±°í©ëë€.
- ììë€ì ìì¹ë¥Œ ì¬ë°°ì¹íì¬ íì ê·ì¹(ì°ì ìì ìì)륌 ì ì§í©ëë€.
- íìì ììê° ì ê±°ëë©Ž íì í¬êž°ê° ê°ìíê³ , ììë€ì ì¬ë°°ì¹ê° íìíë¯ë¡, ìì ì ìê° ë³µì¡ëë O(logN)ì ëë€.
ë°íê°
poll()
ë©ìëë ì°ì ììê° ê°ì¥ ëì ìì륌 ë°ííê³ , íŽë¹ ììê° íìì ì ê±°ëë¯ë¡ ë ìŽì íŽë¹ ìì륌 ì¬ì©í ì ììµëë€. ë°íëë ììì íì
ì ì°ì ìì íê° ì§ì í íì
곌 ëìŒí©ëë€. ë§ìœ ì°ì ìì íê° ë¹ìŽìë€ë©Ž, null
ì ë°íí©ëë€.
poll()
ë©ìë륌 ì¬ì©íë©Ž ì§ì ë ì°ì ììì ë°ëŒ ììê° ì ê±°ëë í¹ì§ì íì©íì¬ ì°ì ìì í륌 íšê³Œì ìŒë¡ êŽëŠ¬í ì ììµëë€. ìŽë¥Œ íµíŽ ì°ì ìì íì ììì ìì륌 ì ê±°íëë° ì¬ì©í ì ììµëë€.
- peek() ë©ìë: ì°ì ììê° ê°ì¥ ëì ìì ë°ííêž°
peek()
ë©ìëë ì°ì ìì íìì ê°ì¥ ì°ì ììê° ëì ìì륌 ì ê±°íì§ ìê³ ë°íí©ëë€.
ì¬ì©ë²
peek()
ë©ìëë ìëì ê°ìŽ ì¬ì©í ì ììµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(10);
int highestPriority = pq.peek();
ìì ììììë pq
ëŒë ìŽëŠì ì°ì ìì í ê°ì²Žë¥Œ ìì±íê³ , offer()
ë©ìë륌 ì¬ì©íì¬ 5ì 10ì ì°ì ìì íì ì¶ê°íê³ ììµëë€. ê·žëŠ¬ê³ peek()
ë©ìë륌 ížì¶íì¬ ê°ì¥ ì°ì ììê° ëì ìì륌 ê°ì žìµëë€. ìŽë, íŽë¹ ììë ì°ì ìì íìì ì ê±°ëì§ ììµëë€.
ìë ì늬
peek()
ë©ìëë ì°ì ìì íìì ê°ì¥ ì°ì ììê° ëì ìì(íì ìµìì ë
žë)륌 ë°ííê³ , íŽë¹ ìì륌 íìì ì ê±°íì§ ììµëë€. ëŽë¶ì ìŒë¡ë íì ìµìì ë
žë륌 ê°ì žì¬ ë¿ìŽë¯ë¡, íì ìíë ë³ê²œëì§ ììµëë€.
ë°íê°
peek()
ë©ìëë ì°ì ììê° ê°ì¥ ëì ìì륌 ë°íí©ëë€. íŽë¹ ììë íìì ì ê±°ëì§ ììŒë¯ë¡ ì¬ì í íìì ì¬ì©í ì ììµëë€. ë°íëë ììì íì
ì ì°ì ìì íê° ì§ì í íì
곌 ëìŒí©ëë€. ë§ìœ ì°ì ìì íê° ë¹ìŽìë€ë©Ž, null
ì ë°íí©ëë€.
peek()
ë©ìë륌 ì¬ì©íë©Ž ì°ì ìì íìì íì¬ ê°ì¥ ì°ì ììê° ëì ìì륌 íìží ì ììµëë€. ìŽë¥Œ íµíŽ ìì륌 ì ê±°íì§ ìê³ ë ì°ì ìì íì ìí륌 íìží ì ììµëë€.
- size() ë©ìë: ì°ì ìì íì í¬êž° ë°ííêž°
size()
ë©ìëë ì°ì ìì íì ì ì¥ë ììì ê°ì륌 ë°íí©ëë€.
ì¬ì©ë²
size()
ë©ìëë ìëì ê°ìŽ ì¬ì©í ì ììµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(10);
int size = pq.size();
ìì ììììë pq
ëŒë ìŽëŠì ì°ì ìì í ê°ì²Žë¥Œ ìì±íê³ , offer()
ë©ìë륌 ì¬ì©íì¬ 5ì 10ì ì°ì ìì íì ì¶ê°íê³ ììµëë€. ê·žëŠ¬ê³ size()
ë©ìë륌 ížì¶íì¬ ì°ì ìì íì í¬êž°ë¥Œ ë°íë°ìµëë€.
ìë ì늬
size()
ë©ìëë ì°ì ìì íì ì ì¥ë ììì ê°ì륌 ë°íí©ëë€. ëŽë¶ì ìŒë¡ë ë°°ìŽ, 늬ì€íž ë±ì ìë£êµ¬ì¡°ë¥Œ ì¬ì©íì¬ ì ì¥ëë ììë€ì êŽëŠ¬íê³ ììŒë¯ë¡, íŽë¹ ìë£êµ¬ì¡°ì ì ì¥ë ììì ê°ì륌 ë°ííê² ë©ëë€.
ë°íê°
size()
ë©ìëë ì°ì ìì íì ì ì¥ë ììì ê°ì륌 ë°íí©ëë€. ë°íëë ê°ì íì
ì ì ìíì
ëë€.
size()
ë©ìë륌 ì¬ì©íë©Ž ì°ì ìì íì í¬êž°ë¥Œ ì ì ììµëë€. ìŽë¥Œ íµíŽ ì°ì ìì íì ì ì¥ë ììì ê°ì륌 íìží ì ììŒë©°, í¬êž°ì ë°ëŒ ì ì í 조걎ì ì€ì íì¬ ìì
ì ìíí ì ììµëë€.
- size() ë©ìë: ì°ì ìì íì í¬êž° ë°ííêž°
size()
ë©ìëë ì°ì ìì íì ì ì¥ë ììì ê°ì륌 ë°íí©ëë€.
ì¬ì©ë²
size()
ë©ìëë ìëì ê°ìŽ ì¬ì©í ì ììµëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(5);
pq.add(10);
int size = pq.size();
ìì ììììë pq
ëŒë ìŽëŠì ì°ì ìì í ê°ì²Žë¥Œ ìì±íê³ , add()
ë©ìë륌 ì¬ì©íì¬ 5ì 10ì ì°ì ìì íì ì¶ê°íê³ ììµëë€. ê·žëŠ¬ê³ size()
ë©ìë륌 ížì¶íì¬ ì°ì ìì íì í¬êž°ë¥Œ ë°íë°ìµëë€.
ìë ì늬
size()
ë©ìëë ì°ì ìì íì ì ì¥ë ììì ê°ì륌 ë°íí©ëë€. ëŽë¶ì ìŒë¡ë ë°°ìŽ, 늬ì€íž ë±ì ìë£êµ¬ì¡°ë¥Œ ì¬ì©íì¬ ì ì¥ëë ììë€ì êŽëŠ¬íê³ ììŒë¯ë¡, íŽë¹ ìë£êµ¬ì¡°ì ì ì¥ë ììì ê°ì륌 ë°ííê² ë©ëë€.
ë°íê°
size()
ë©ìëë ì°ì ìì íì ì ì¥ë ììì ê°ì륌 ë°íí©ëë€. ë°íëë ê°ì íì
ì ì ìíì
ëë€.
size()
ë©ìë륌 ì¬ì©íë©Ž ì°ì ìì íì í¬êž°ë¥Œ ì ì ììµëë€. ìŽë¥Œ íµíŽ ì°ì ìì íì ì ì¥ë ììì ê°ì륌 íìží ì ììŒë©°, í¬êž°ì ë°ëŒ ì ì í 조걎ì ì€ì íì¬ ìì
ì ìíí ì ììµëë€.
4. ì°ì ìì ì€ì íêž°
ì°ì ìì íììë ììë€ìŽ ì°ì ììì ë°ëŒ ì ë ¬ëìŽ ì ì¥ëëë°, ìŽ ë ì°ì ìì륌 ìŽë»ê² ì€ì í ì ìëì§ ììë³Žê² ìµëë€.
Comparator ìží°íìŽì€ë¥Œ ì¬ì©í ì°ì ìì ì€ì
Javaììë Comparator ìží°íìŽì€ë¥Œ ìŽì©íì¬ ì°ì ìì륌 ì€ì í ì ììµëë€. Comparator ìží°íìŽì€ë compare()
ë©ìë륌 ì ìíì¬ ììë€ì ì°ì ìì륌 ë¹êµíë êž°ì€ì ì í ì ììµëë€.
ë€ìì Comparator ìží°íìŽì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì íë ë°©ë²ì ëë€.
PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());
pq.offer(5);
pq.offer(10);
ìì ììììë PriorityQueue ê°ì²Ž pq
륌 ìì±í ë Comparator.reverseOrder()
륌 ì ë¬íììµëë€. ìŽë ì°ì ìì íì ììë€ì ìììŒë¡ ì ë ¬íê² ë€ë ì믞ì
ëë€. ë°ëŒì, 5ë³Žë€ 10ìŽ ì°ì ììê° ëê² ì€ì ë ê²ì
ëë€.
Comparable ìží°íìŽì€ë¥Œ ìŽì©í ì°ì ìì ì€ì
ì°ì ìì íì ììë¡ ì¬ì©ëë ê°ì²Žê° ìŽë¯ž Comparable ìží°íìŽì€ë¥Œ 구íí 겜ì°ìë ë³ëì Comparator ê°ì²Žë¥Œ ì¬ì©íì§ ìê³ ë ì°ì ìì륌 ì€ì í ì ììµëë€. Comparable ìží°íìŽì€ë compareTo()
ë©ìë륌 ì ìíì¬ ììë€ ê°ì ì°ì ìì ë¹êµ êž°ì€ì ì ê³µí©ëë€.
ë€ìì Comparable ìží°íìŽì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì íë ë°©ë²ì ëë€.
public class Person implements Comparable<Person> {
private String name;
private int age;
// ìì±ì, getter, setter ë± ìëµ
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age);
}
}
ìì ììììë Person íŽëì€ê° Comparable ìží°íìŽì€ë¥Œ 구ííê³ ììµëë€. compareTo()
ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ëìŽì ë°ëŒ ì°ì ìì륌 ë¹êµíëë¡ ì€ì íììµëë€.
PriorityQueue<Person> pq = new PriorityQueue<>();
Person person1 = new Person("John", 30);
Person person2 = new Person("Alice", 25);
pq.offer(person1);
pq.offer(person2);
ìì ìœëììë Person ê°ì²Žë¥Œ ììë¡ ê°ë ì°ì ìì í륌 ìì±í í, Person ê°ì²Žë€ì ì°ì ìì륌 ê³ ë €íì¬ ì¶ê°íê³ ììµëë€. compareTo()
ë©ìë륌 íµíŽ ì°ì ììê° ê²°ì ëë©°, ëìŽê° ë®ì Aliceê° ëìŽê° ëì Johnë³Žë€ ì°ì ììê° ëê² ì€ì ë ê²ì
ëë€.
ì°ì ìì륌 ì€ì íë ë°©ë²ìë Comparator ìží°íìŽì€ì Comparable ìží°íìŽì€ë¥Œ ì¬ì©íë ë ê°ì§ ë°©ë²ìŽ ììµëë€. ìí©ì ë§ê² ì ííì¬ ì°ì ìì륌 ì€ì í ì ììŒë©°, ìŽë¥Œ íµíŽ ì°ì ìì íì ëìì ì ì°íê² ì¡°ì í ì ììµëë€.
Comparator ìží°íìŽì€ ì¬ì©íŽì ì°ì ìì ì€ì íêž°
Javaììë Comparator ìží°íìŽì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì í ì ììµëë€. Comparator ìží°íìŽì€ë compare()
ë©ìë륌 ì ìíì¬ ììë€ì ì°ì ìì륌 ë¹êµíë êž°ì€ì ì€ì í©ëë€.
Comparator ìží°íìŽì€ 구ííêž°
Comparator ìží°íìŽì€ë¥Œ ì¬ì©íêž° ìíŽìë 뚌ì Comparator ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ìì±íŽìŒ í©ëë€. ìŽ íŽëì€ë compare()
ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ììë€ì ë¹êµíë êž°ì€ì ì ìí©ëë€.
import java.util.Comparator;
public class MyComparator implements Comparator<Integer> {
@Override
public int compare(Integer a, Integer b) {
return Integer.compare(b, a); // ëŽëŠŒì°šì ì ë ¬
}
}
ìì ììììë MyComparator íŽëì€ê° Comparatorcompare()
ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ë ê°ì ì ì륌 ë¹êµíê³ ììŒë©°, ìŽ ë ë€ì ì ìê° ìì ì ìë³Žë€ í° ê²œì°ì ìì륌 ë°ííì¬ ëŽëŠŒì°šììŒë¡ ì ë ¬íëë¡ ì€ì íììµëë€.
ì ìë Comparator ê°ì²Žë¥Œ ì°ì ìì íì ì ë¬íêž°
ìŽì 구íí Comparator ìží°íìŽì€ë¥Œ ìŽì©íì¬ ì°ì ìì륌 ì€ì í ì ììµëë€. ì°ì ìì í ê°ì²Žë¥Œ ìì±í ë, ìì±ìì Comparator ê°ì²Žë¥Œ ì ë¬íì¬ ì°ì ìì ì€ì ì ì§ì í ì ììµëë€.
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
PriorityQueue<Integer> pq = new PriorityQueue<>(new MyComparator());
pq.offer(5);
pq.offer(10);
pq.offer(3);
// ì¶ë ¥ 결곌: 10 5 3
while (!pq.isEmpty()) {
System.out.print(pq.poll() + " ");
}
}
}
ìì ììììë MyComparator ê°ì²Žë¥Œ ìì±íì¬ PriorityQueue ê°ì²Ž pq
ì ìì±ìì ì ë¬íê³ ììµëë€. ìŽë ê² íšìŒë¡ìš ììë€ì MyComparatorì compare()
ë©ìëì ìíŽ ë¹êµëë©°, ëŽëŠŒì°šììŒë¡ ì ë ¬ë ìíë¡ ì ì¥ëê² ë©ëë€.
pq.offer(5)
ì pq.offer(10)
ì ìíí í, poll()
ë©ìë륌 ìŽì©íì¬ ììë€ì íëì© ë¹ŒëŽìŽ ì¶ë ¥íë©Ž, 10, 5, 3ì ììë¡ ììë€ìŽ ì¶ë ¥ë ê²ì
ëë€.
ìì ë°©ë²ì²ëŒ Comparator ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ìì±íì¬ ì°ì ìì륌 ì€ì íê³ , PriorityQueue ìì±ìì ì ë¬íšìŒë¡ìš ì°ì ìì íì ëìì ìíë ëë¡ ì€ì í ì ììµëë€.
Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ ì¬ì©íŽì ì°ì ìì ì€ì íêž°
ì°ì ìì íììë Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì í ì ììµëë€. Comparable ìží°íìŽì€ë compareTo()
ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ììë€ì ë¹êµíë êž°ì€ì ì ê³µí©ëë€.
Comparable ìží°íìŽì€ 구ííêž°
Comparable ìží°íìŽì€ë¥Œ ì¬ì©íêž° ìíŽìë 뚌ì Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ìì±íŽìŒ í©ëë€. ìŽ íŽëì€ë compareTo()
ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ììë€ì ë¹êµíë êž°ì€ì ì ìí©ëë€.
ë€ìì Person íŽëì€ë¥Œ ììë¡ Comparable ìží°íìŽì€ë¥Œ 구íí ìœëì ëë€.
public class Person implements Comparable<Person> {
private String name;
private int age;
// ìì±ì, getter, setter ë± ìëµ
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age);
}
}
ìì ììììë Person íŽëì€ê° ComparablecompareTo()
ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ëìŽì ë°ëŒ ì°ì ìì륌 ë¹êµíë êž°ì€ì ì ìíê³ ììµëë€.
Comparable ìží°íìŽì€ë¥Œ ì ì©í ì°ì ìì í
Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì í ì ììµëë€. ì°ì ìì í ê°ì²Žë¥Œ ìì±í ë, ì¶ê°ëë ììë€ì íŽëì€ê° Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ìŒ 겜ì°, ììë€ì compareTo()
ë©ìë륌 ìŽì©íì¬ ìëìŒë¡ ì°ì ììê° ê²°ì ë©ëë€.
ë€ìì Person ê°ì²Žë¥Œ ììë¡ ê°ë ì°ì ìì í륌 ìì±íê³ , Person ê°ì²Žë€ì ì°ì ìì륌 ê³ ë €íì¬ ì¶ê°íë ììì ëë€.
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
PriorityQueue<Person> pq = new PriorityQueue<>();
Person person1 = new Person("John", 30);
Person person2 = new Person("Alice", 25);
pq.offer(person1);
pq.offer(person2);
// ì¶ë ¥ 결곌: 25 30
while (!pq.isEmpty()) {
System.out.print(pq.poll().getAge() + " ");
}
}
}
ìì ìœëììë Person ê°ì²Žë¥Œ ììë¡ ê°ë ì°ì ìì í륌 ìì±í í, Person ê°ì²Žë€ì ì°ì ìì륌 ê³ ë €íì¬ ì¶ê°íê³ ììµëë€. getAge()
ë©ìë륌 íµíŽ ëìŽ ì 볎륌 ê°ì žì ì¶ë ¥íììŒë©°, ìŽë¥Œ 볎멎 ëìŽê° ë®ì Aliceê° ëìŽê° ëì Johnë³Žë€ ì°ì ììê° ëê² ì€ì ëìŽ ììì ì ì ììµëë€.
Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì íê³ , PriorityQueueì ìì륌 ì¶ê°íšìŒë¡ìš ì°ì ìì íì ëìì ìíë ëë¡ ì€ì í ì ììµëë€. Comparable ìží°íìŽì€ë¥Œ ìŽì©íë©Ž ì°ì ìì ì€ì ì ëì± ížëŠ¬íê² ì ê·Œí ì ììµëë€.
Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ ì¬ì©íŽì ì°ì ìì ì€ì íêž°
ì°ì ìì íììë Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì í ì ììµëë€. Comparable ìží°íìŽì€ë compareTo()
ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ììë€ì ë¹êµíë êž°ì€ì ì ê³µí©ëë€.
Comparable ìží°íìŽì€ 구ííêž°
Comparable ìží°íìŽì€ë¥Œ ì¬ì©íêž° ìíŽìë 뚌ì Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ìì±íŽìŒ í©ëë€. ìŽ íŽëì€ë compareTo()
ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ììë€ì ë¹êµíë êž°ì€ì ì ìí©ëë€.
ì륌 ë€ìŽ, ì¬ë(Person)ì íííë íŽëì€ë¥Œ Comparable ìží°íìŽì€ë¥Œ 구ííì¬ ì°ì ìì ì€ì ì í ì ììµëë€.
public class Person implements Comparable<Person> {
private String name;
private int age;
// ìì±ì, getter, setter ë± ìëµ
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age);
}
}
ìì ììììë Person íŽëì€ê° ComparablecompareTo()
ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ëìŽì ë°ëŒ ì°ì ìì륌 ë¹êµíë êž°ì€ì ì ìíê³ ììµëë€. ìŽ ê²œì°ìë ëìŽê° ì ì ì¬ëìŽ ì°ì ììê° ëê² ì€ì ëëë¡ ì ìëìŽ ììµëë€.
Comparable ìží°íìŽì€ë¥Œ ì ì©í ì°ì ìì í
Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì í ì ììµëë€. ì°ì ìì í ê°ì²Žë¥Œ ìì±í ë, ì¶ê°ëë ììë€ì íŽëì€ê° Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ìŒ 겜ì°, ììë€ì compareTo()
ë©ìë륌 ìŽì©íì¬ ìëìŒë¡ ì°ì ììê° ê²°ì ë©ëë€.
ë€ìì Person ê°ì²Žë¥Œ ììë¡ ê°ë ì°ì ìì í륌 ìì±íê³ , Person ê°ì²Žë€ì ì°ì ìì륌 ê³ ë €íì¬ ì¶ê°íë ììì ëë€.
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
PriorityQueue<Person> pq = new PriorityQueue<>();
Person person1 = new Person("John", 30);
Person person2 = new Person("Alice", 25);
pq.offer(person1);
pq.offer(person2);
// ì¶ë ¥ 결곌: 25 30
while (!pq.isEmpty()) {
System.out.print(pq.poll().getAge() + " ");
}
}
}
ìì ìœëììë Person ê°ì²Žë¥Œ ììë¡ ê°ë ì°ì ìì í륌 ìì±í í, Person ê°ì²Žë€ì ì°ì ìì륌 ê³ ë €íì¬ ì¶ê°íê³ ììµëë€. getAge()
ë©ìë륌 íµíŽ ëìŽ ì 볎륌 ê°ì žì ì¶ë ¥íììŒë©°, ìŽë¥Œ 볎멎 ëìŽê° ë®ì Aliceê° ëìŽê° ëì Johnë³Žë€ ì°ì ììê° ëê² ì€ì ëìŽ ììì ì ì ììµëë€.
Comparable ìží°íìŽì€ë¥Œ 구íí íŽëì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì íê³ , PriorityQueueì ìì륌 ì¶ê°íšìŒë¡ìš ì°ì ìì íì ëìì ìíë ëë¡ ì€ì í ì ììµëë€. Comparable ìží°íìŽì€ë¥Œ ìŽì©íë©Ž ì°ì ìì ì€ì ì ëì± ížëŠ¬íê² ì ê·Œí ì ììµëë€.
5. ì°ì ìì í íì© ìì
ì°ì ìì íë ë°ìŽí°ë€ì ì°ì ììì ë°ëŒ ì ì¥íê³ , ì°ì ììê° ê°ì¥ ëì ë°ìŽí°ê° ê°ì¥ 뚌ì ì²ëŠ¬ëë ìë£êµ¬ì¡°ì ëë€. ì°ì ìì íë ë€ìí ì í늬ìŒìŽì ìì ì¬ì©ë ì ììŒë©°, ìŽë² ìì ììë ì°ì ìì íê° ìŽë»ê² íì©ëëì§ ììë³Žê² ìµëë€.
ì구ì¬í
ì°ì ìì í륌 ì¬ì©íì¬ íìë€ì ì±ì ì êŽëŠ¬íê³ , ê°ì¥ ì±ì ìŽ ëì íìì ì¶ë ¥íë íë¡ê·žëšì ìì±íŽìŒ í©ëë€. ê° íì(student)ì ìŽëŠ(name)곌 ì±ì (score) ì 볎륌 ê°ê³ ììµëë€.
íŽê²° ë°©ë²
íŽê²° ë°©ë²ì ë€ì곌 ê°ìµëë€.
- Comparable ìží°íìŽì€ë¥Œ 구íí Student íŽëì€ë¥Œ ìì±í©ëë€. ìŽ íŽëì€ë ìŽëŠê³Œ ì±ì ì ì ì¥íê³ , ì±ì ì ë°ëŒ ì°ì ììê° ê²°ì ë©ëë€.
- ì°ì ìì í(PriorityQueue) ê°ì²Žë¥Œ ìì±í©ëë€.
- íìë€ì ì±ì ì ì°ì ììì ë°ëŒ ì°ì ìì íì ì¶ê°í©ëë€.
- ì°ì ìì íìì ê°ì¥ ì±ì ìŽ ëì íìì 꺌ëŽìŽ ì¶ë ¥í©ëë€.
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
PriorityQueue<Student> pq = new PriorityQueue<>();
Student student1 = new Student("Alice", 85);
Student student2 = new Student("Bob", 92);
Student student3 = new Student("Chris", 78);
pq.offer(student1);
pq.offer(student2);
pq.offer(student3);
Student topStudent = pq.poll();
System.out.println("ê°ì¥ ì±ì ìŽ ëì íì: " + topStudent.getName() + " (ì±ì : " + topStudent.getScore() + ")");
}
}
class Student implements Comparable<Student> {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
@Override
public int compareTo(Student other) {
return Integer.compare(other.score, this.score); // ì±ì ìŽ ëì ììë¡ ì ë ¬íêž° ìíŽ ë€ë¥ž ê°ì²Žìì ë¹êµ 결곌륌 ë°ì íš
}
}
ì ìœëììë Student íŽëì€ë¥Œ Comparable ìží°íìŽì€ë¥Œ 구ííì¬ ì±ì ì êž°ì€ìŒë¡ ì°ì ìì륌 ì€ì í©ëë€. ì±ì ìŽ ëì íììŒìë¡ ì°ì ììê° ëëë¡ compareTo() ë©ìëê° êµ¬íëìŽ ììµëë€.
Main íŽëì€ììë ì°ì ìì í륌 ìì±í í, íì ê°ì²Žë€ì ì°ì ììì ë°ëŒ ì¶ê°í©ëë€. ë§ì§ë§ìŒë¡ poll() ë©ìë륌 ì¬ì©íì¬ ê°ì¥ ì±ì ìŽ ëì íìì 꺌ëŽìŽ ì¶ë ¥í©ëë€.
ì¶ë ¥ 결곌ë ë€ì곌 ê°ìµëë€.
ê°ì¥ ì±ì ìŽ ëì íì: Bob (ì±ì : 92)
ìêž° ìì륌 íµíŽ ì°ì ìì í륌 íì©í ì€ì 묞ì 륌 íŽê²°íë ë°©ë²ì ìŽíŽë³Žììµëë€. Comparable ìží°íìŽì€ë¥Œ íì©íì¬ ììë€ì ì°ì ìì륌 ì€ì í ì ìê² ëìŽ, ëì± ì ì°íê³ íšê³Œì ìž ìë£êµ¬ì¡°ë¥Œ 구íí ì ìê² ëììµëë€.
ìì ì€ìŒì€ë§ ìì€í 구ííêž°
ìì ì€ìŒì€ë§ ìì€í ì ì¬ë¬ ìì ë€ì ì°ì ììì ë°ëŒ ì²ëŠ¬íë ìì€í ì ëë€. ìŽë² ìì ììë ìì (job)ì êŽëŠ¬íë ìì ì€ìŒì€ë§ ìì€í ì 구ííë ë°©ë²ì ììë³Žê² ìµëë€.
ì구ì¬í
ìì ì€ìŒì€ë§ ìì€í ì 구ííì¬ ë€ì곌 ê°ì êž°ë¥ì ì ê³µíŽìŒ í©ëë€.
- ìì ì ì¶ê°í ì ììµëë€.
- ê°ì¥ ì°ì ììê° ëì ìì ì ì€íí ì ììµëë€.
íŽê²° ë°©ë²
íŽê²° ë°©ë²ì ë€ì곌 ê°ìµëë€.
- Comparable ìží°íìŽì€ë¥Œ 구íí Job íŽëì€ë¥Œ ìì±í©ëë€. ìŽ íŽëì€ë ìì ìŽëŠ(name)곌 ìì ì ì°ì ìì(priority) ì 볎륌 ê°ìµëë€.
- ì°ì ìì í(PriorityQueue) ê°ì²Žë¥Œ ìì±í©ëë€.
- ìì ë€ì ì°ì ììì ë°ëŒ ì°ì ìì íì ì¶ê°í©ëë€.
- ê°ì¥ ì°ì ììê° ëì ìì ì 꺌ëŽìŽ ì€íí©ëë€.
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
PriorityQueue<Job> jobQueue = new PriorityQueue<>();
Job job1 = new Job("ìì
1", 2);
Job job2 = new Job("ìì
2", 1);
Job job3 = new Job("ìì
3", 3);
jobQueue.offer(job1);
jobQueue.offer(job2);
jobQueue.offer(job3);
Job topJob = jobQueue.poll();
System.out.println("ê°ì¥ ì°ì ììê° ëì ìì
ì€í: " + topJob.getName());
}
}
class Job implements Comparable<Job> {
private String name;
private int priority;
public Job(String name, int priority) {
this.name = name;
this.priority = priority;
}
public String getName() {
return name;
}
@Override
public int compareTo(Job other) {
return Integer.compare(this.priority, other.priority);
}
}
ì ìœëììë Job íŽëì€ë¥Œ Comparable ìží°íìŽì€ë¥Œ 구ííì¬ ì°ì ìì륌 êž°ì€ìŒë¡ ìì ì êŽëŠ¬í©ëë€. Job íŽëì€ë ìì ì ìŽëŠê³Œ ì°ì ìì륌 ì ì¥íê³ , compareTo() ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ì°ì ìì륌 ë¹êµí©ëë€.
Main íŽëì€ììë ì°ì ìì í륌 ìì±í í, ìì ê°ì²Žë€ì ì°ì ììì ë°ëŒ ì¶ê°í©ëë€. ë§ì§ë§ìŒë¡ poll() ë©ìë륌 ì¬ì©íì¬ ê°ì¥ ì°ì ììê° ëì ìì ì 꺌ëŽìŽ ì€íí©ëë€.
ì¶ë ¥ 결곌ë ë€ì곌 ê°ìµëë€.
ê°ì¥ ì°ì ììê° ëì ìì
ì€í: ìì
2
ì ìì륌 íµíŽ ìì ì€ìŒì€ë§ ìì€í ì 구ííë ë°©ë²ì ìŽíŽë³Žììµëë€. Comparable ìží°íìŽì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì íë©Ž ì°ì ìì í륌 íšê³Œì ìŒë¡ íì©í ì ììŒë©°, ìì ì€ìŒì€ë§ ìì€í ì íšìšì ìŒë¡ 구íí ì ììµëë€.
ìŽë²€íž ì²ëŠ¬ ìì€í 구ííêž°
ìŽë²€íž ì²ëŠ¬ ìì€í ì ì¬ë¬ ìŽë²€ížë€ì ì°ì ììì ë°ëŒ ì²ëŠ¬íë ìì€í ì ëë€. ìŽë² ìì ììë ìŽë²€íž(event)륌 êŽëŠ¬íë ìŽë²€íž ì²ëŠ¬ ìì€í ì 구ííë ë°©ë²ì ììë³Žê² ìµëë€.
ì구ì¬í
ìŽë²€íž ì²ëŠ¬ ìì€í ì 구ííì¬ ë€ì곌 ê°ì êž°ë¥ì ì ê³µíŽìŒ í©ëë€.
- ìŽë²€ížë¥Œ ì¶ê°í ì ììµëë€.
- ê°ì¥ ì°ì ììê° ëì ìŽë²€ížë¥Œ ì²ëŠ¬í ì ììµëë€.
íŽê²° ë°©ë²
íŽê²° ë°©ë²ì ë€ì곌 ê°ìµëë€.
- Comparable ìží°íìŽì€ë¥Œ 구íí Event íŽëì€ë¥Œ ìì±í©ëë€. ìŽ íŽëì€ë ìŽë²€íž ìŽëŠ(name)곌 ìŽë²€ížì ì°ì ìì(priority) ì 볎륌 ê°ìµëë€.
- ì°ì ìì í(PriorityQueue) ê°ì²Žë¥Œ ìì±í©ëë€.
- ìŽë²€ížë€ì ì°ì ììì ë°ëŒ ì°ì ìì íì ì¶ê°í©ëë€.
- ê°ì¥ ì°ì ììê° ëì ìŽë²€ížë¥Œ 꺌ëŽìŽ ì²ëŠ¬í©ëë€.
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
PriorityQueue<Event> eventQueue = new PriorityQueue<>();
Event event1 = new Event("ìŽë²€íž1", 2);
Event event2 = new Event("ìŽë²€íž2", 1);
Event event3 = new Event("ìŽë²€íž3", 3);
eventQueue.offer(event1);
eventQueue.offer(event2);
eventQueue.offer(event3);
Event topEvent = eventQueue.poll();
System.out.println("ê°ì¥ ì°ì ììê° ëì ìŽë²€íž ì²ëŠ¬: " + topEvent.getName());
}
}
class Event implements Comparable<Event> {
private String name;
private int priority;
public Event(String name, int priority) {
this.name = name;
this.priority = priority;
}
public String getName() {
return name;
}
@Override
public int compareTo(Event other) {
return Integer.compare(this.priority, other.priority);
}
}
ì ìœëììë Event íŽëì€ë¥Œ Comparable ìží°íìŽì€ë¥Œ 구ííì¬ ì°ì ìì륌 êž°ì€ìŒë¡ ìŽë²€ížë¥Œ êŽëŠ¬í©ëë€. Event íŽëì€ë ìŽë²€ížì ìŽëŠê³Œ ì°ì ìì륌 ì ì¥íê³ , compareTo() ë©ìë륌 ì€ë²ëŒìŽë©íì¬ ì°ì ìì륌 ë¹êµí©ëë€.
Main íŽëì€ììë ì°ì ìì í륌 ìì±í í, ìŽë²€íž ê°ì²Žë€ì ì°ì ììì ë°ëŒ ì¶ê°í©ëë€. ë§ì§ë§ìŒë¡ poll() ë©ìë륌 ì¬ì©íì¬ ê°ì¥ ì°ì ììê° ëì ìŽë²€ížë¥Œ 꺌ëŽìŽ ì²ëŠ¬í©ëë€.
ì¶ë ¥ 결곌ë ë€ì곌 ê°ìµëë€.
ê°ì¥ ì°ì ììê° ëì ìŽë²€íž ì²ëŠ¬: ìŽë²€íž2
ì ìì륌 íµíŽ ìŽë²€íž ì²ëŠ¬ ìì€í ì 구ííë ë°©ë²ì ìŽíŽë³Žììµëë€. Comparable ìží°íìŽì€ë¥Œ ì¬ì©íì¬ ì°ì ìì륌 ì€ì íë©Ž ì°ì ìì í륌 íšê³Œì ìŒë¡ íì©í ì ììŒë©°, ìŽë²€íž ì²ëŠ¬ ìì€í ì íšìšì ìŒë¡ 구íí ì ììµëë€.
ëêž