Post

๐Ÿ’ช๐Ÿป programmers ๊ณ ๋“์  Kit - ํž™(Heap)

๐Ÿ’ช๐Ÿป programmers ๊ณ ๋“์  Kit - ํž™(Heap)

Heap(ํž™)

์ตœ์†Ÿ๊ฐ’ ๋˜๋Š” ์ตœ๋Œ“๊ฐ’ ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•ด ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ

1 ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : ๋ธ”๋กœ๊ทธ ๋งํฌ

Tree ๊ตฌ์กฐ, ๊ฑฐ๊พธ๋กœ ๋ณด๋ฉด ๋‚˜๋ฌด ๊ฐ™์ด ์ƒ๊ฒจ์„œ ํŠธ๋ฆฌ๊ตฌ์กฐ๋ผ๊ณ  ํ•œ๋‹ค.

  • ๋ถ€๋ชจ๋…ธ๋“œ : ์ž๊ธฐ ์ž์‹ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ค‘ ์ž์‹ ๋ณด๋‹ค ๋†’์€ ๋…ธ๋“œ(B์˜ ๋ถ€๋ชจ : A)

  • ์ž์‹๋…ธ๋“œ : ์ž๊ธฐ ์ž์‹ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ค‘ ์ž์‹ ๋ณด๋‹ค ๋‚ฎ์€ ๋…ธ๋“œ(C์˜ ์ž์‹ : G)

  • ๋ฃจํŠธ๋…ธ๋“œ : ์ผ๋ช… ๋ฟŒ๋ฆฌ ๋…ธ๋“œ๋ผ๊ณ  ํ•˜๋ฉฐ ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ์—์„œ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•จ -> A

  • ๋‹จ๋ง๋…ธ๋“œ : ๋ฆฌํ”„ ๋…ธ๋“œ๋ผ๊ณ  ํ•˜๋ฉฐ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ

  • ๋‚ด๋ถ€๋…ธ๋“œ : ๋‹จ๋ง ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ

  • ํ˜•์ œ๋…ธ๋“œ : ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์€ ๋…ธ๋“œ (H, I, J)

  • ๊นŠ์ด(depth) : ํŠน์ • ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์ฒ˜๊ฐ€์•ผ ํ•˜๋Š” โ€˜๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜โ€™ (H์˜ ๊นŠ์ด : A -> D -> H (2๊ฐœ))

  • ๋ ˆ๋ฒจ(length) : ํŠน์ • ๊นŠ์ด์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์˜ ์ง‘ํ•ฉ

  • ์ฐจ์ˆ˜(degree) : ํŠน์ • ๋…ธ๋“œ๊ฐ€ ํ•˜์œ„(์ž์‹) ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๊ฐœ์ˆ˜ (B์˜ ์ฐจ์ˆ˜ E, F (2๊ฐœ))

1 ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : ๋ธ”๋กœ๊ทธ ๋งํฌ

์—ฌ๊ธฐ์„œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ๋ž€ ์œ„์˜ ํŠธ๋ฆฌ๊ตฌ์กฐ์—์„œ ํŠน์ •ํ•œ ํ˜•ํƒœ๋กœ ์ œํ•œ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ตœ๋Œ€ ์ฐจ์ˆ˜๋ฅผ 2๋กœ ์ œํ•œํ•œ๋‹ค. -> ๊ฐ ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ตœ๋Œ€ 2๊ฐœ๊นŒ์ง€๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • โ€˜๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจโ€™์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ฑ„์›Œ์ ธ ์žˆ๊ณ  ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฑ„์›Œ์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

1 ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : ๋ธ”๋กœ๊ทธ ๋งํฌ

ํฌํ™” ์ด์ง„ํŠธ๋ฆฌ : ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๋‘ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Heap(ํž™)์˜ ๊ตฌํ˜„์€?

์–ด๋–ค ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๋ ค๊ณ  ํ•  ๋•Œ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ ๋นผ๋‚ด๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ๋ณดํ†ต ์ •๋ ฌ์„ ์ƒ๊ฐํ•  ๊ฒƒ์ด๋‹ค. ์ˆซ์ž๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ๋งค๋ฒˆ ์ƒˆ ์›์†Œ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ด๋ฏธ ๋ฆฌ์ŠคํŠธ์— ์žˆ๋˜ ์›์†Œ๋“ค๊ณผ ๋น„๊ตํ•˜๊ณ  ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค.

์ด์™€ ๊ฐ™์€ ๊ณผ์ •์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ด์™€ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋ถ™์ธ๋‹ค.

๋ถ€๋ชจ๋…ธ๋“œ๋Š” ํ•ญ์ƒ ์ž์‹๋…ธ๋“œ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค! ์ฆ‰, ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค. ๋ถ€๋ชจ๋…ธ๋“œ๊ฐ€ ํ•ญ์ƒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค๋Š” ์กฐ๊ฑด๋งŒ ๋งŒ์กฑ์‹œํ‚ค๋ฉด์„œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์ฑ„์›Œ๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

1 ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : ๋ธ”๋กœ๊ทธ ๋งํฌ

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฃจํŠธ ๋…ธ๋“œ(์—ฌ๊ธฐ์„œ 1)๋Š” ํ•ญ์ƒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋…ธ๋“œ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์›๋ฆฌ๋กœ ์ตœ๋Œ€๊ฐ’์ด๋‚˜ ์ตœ์†Ÿ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ (์‹œ๊ฐ„ ๋ณต์žก๋„: O(1))๊ณผ ํ•จ๊ป˜ ์‚ฝ์ž…, ์‚ญ์ œ, ์—ฐ์‚ฐ์‹œ์—๋„ ๋ถ€๋ชจ๋…ธ๋“œ๊ฐ€ ์ž์‹๋…ธ๋“œ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๋งŒ ๋†’์œผ๋ฉด ๋˜๋ฏ€๋กœ ๊ฒฐ๊ตญ ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋งŒํผ๋งŒ ๋น„๊ต๋ฅผ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(logN)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

์ถ”๊ฐ€๋กœ ๋ถ€๋ชจ๋…ธ๋“œ์™€ ์ž์‹๋…ธ๋“œ์˜ ๊ด€๊ณ„๋งŒ ์‹ ๊ฒฝ์“ฐ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜•์ œ๊ฐ„ ์šฐ์„ ์ˆœ์œ„๋Š” ๊ณ ๋ ค๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฌํ•œ ์ •๋ ฌ ์ƒํƒœ๋ฅผ โ€˜๋ฐ˜์ •๋ ฌ ์ƒํƒœโ€™, โ€˜๋А์Šจํ•œ ์ •๋ ฌ ์ƒํƒœโ€™, โ€˜์•ฝํ•œ ํž™โ€™์ด๋ผ๊ณ  ํ•œ๋‹ค.

1

  • ์ตœ์†Œ ํž™ : ๋ถ€๋ชจ ๋…ธ๋“œ ๊ฐ’(key ๊ฐ’) <= ์ž์‹ ๋…ธ๋“œ ๊ฐ’(key ๊ฐ’)

  • ์ตœ๋Œ€ ํž™ : ๋ถ€๋ชจ ๋…ธ๋“œ ๊ฐ’(key ๊ฐ’) >= ์ž์‹ ๋…ธ๋“œ ๊ฐ’(key ๊ฐ’)

๐Ÿ”Š ์„ฑ์งˆ

  1. ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค = ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค * 2
  2. ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค = ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค * 2 + 1
  3. ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค = ์ž์‹ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค / 2


Heap(ํž™) ๊ตฌํ˜„

  • ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„

  • ์ธ๋ฑ์Šค 0์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

  • ๋ถ€๋ชจ-์ž์‹ ์‚ฌ์ด ์ธ๋ฑ์Šค ๊ด€๊ณ„

    • ์ธ๋ฑ์Šค i ์—์„œ ๋ถ€๋ชจ ์ธ๋ฑ์Šค : i / 2

    • ์ธ๋ฑ์Šค i ์—์„œ ์ขŒ์ธก ์ธ๋ฑ์Šค : i * 2

    • ์ธ๋ฑ์Šค i ์—์„œ ์šฐ์ธก ์ธ๋ฑ์Šค : (i * 2) + 1

1 1


์ตœ๋Œ€ ํž™์œผ๋กœ ๊ฐ€์ •

์‚ฝ์ž… ์—ฐ์‚ฐ

  1. ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ๋…ธ๋“œ ๋งŒ๋“ค์–ด์„œ ์‚ฝ์ž…

  2. ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ์ž‘์œผ๋ฉด ๋

  3. ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ํฌ๋ฉด ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์Šค์œ„์น˜

  4. 2~3๋ฒˆ ๊ณผ์ • ์ตœ๋Œ€ ๋ฃจํŠธ๊นŒ์ง€ ๋ฐ˜๋ณต

1

  • ์ƒˆ๋กœ์šด ๋…ธ๋“œ 9 ์‚ฝ์ž…

1

  • ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ํฌ๋ฏ€๋กœ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์Šค์œ„์น˜

์‚ญ์ œ ์—ฐ์‚ฐ

  1. ๋ฃจํŠธ ๋…ธ๋“œ ๊ฐ’ ์ œ๊ฑฐ

  2. ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ๊ฐ’ ๋ฃจํŠธ๋กœ ์˜ฎ๊ธฐ๊ณ  ๋…ธ๋“œ ์‚ญ์ œ

3-1. ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ํฌ๋ฉด ๋

3-2. ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ์ž‘์œผ๋ฉด ์Šค์œ„์น˜

  1. 3๋ฒˆ ๊ณผ์ • ์ตœ๋Œ€ ๋ฆฌํ”„๊นŒ์ง€ ๋ฐ˜๋ณต

1

  • ๋ฃจํŠธ ๋…ธ๋“œ ๊ฐ’ 10 ์ œ๊ฑฐ

1

  • ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ๊ฐ’ ๋ฃจํŠธ๋กœ ์˜ฎ๊ธฐ๊ณ  ๋…ธ๋“œ ์‚ญ์ œ

1

  • ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ์ž‘์œผ๋ฏ€๋กœ ์Šค์œ„์น˜

1

  • ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ์ž‘์œผ๋ฏ€๋กœ ์Šค์œ„์น˜


์ž๋ฐ”์—์„œ ์šฐ์„ ์ˆœ์œ„ ํ

์„ ์–ธ

  • new PriorityQueue<[type]>()

    • PriorityQueue<Integer> pq = new PriorityQueue<>(); // ์˜ค๋ฆ„์ฐจ์ˆœ

    • PriorityQueue<Integer> pq = new PriorityQueue<Integer>(Collections.reverseOrder()); // ๋‚ด๋ฆผ์ฐจ์ˆœ

์‚ฝ์ž…

  • add(E element) : ํ ๊ณต๊ฐ„์ด ์—†์–ด์„œ ์‚ฝ์ž… ์‹คํŒจ ์‹œ exception

  • offer(E element) : ํ ๊ณต๊ฐ„์ด ์—†์–ด์„œ ์‚ฝ์ž… ์‹คํŒจ ์‹œ null ๋ฐ˜ํ™˜

์‚ญ์ œ

  • poll() : front์— ์œ„์น˜ํ•œ ์›์†Œ ์ œ๊ฑฐ ํ›„ ๋ฐ˜ํ™˜, ํ ๋น„์—ˆ๋‹ค๋ฉด null ๋ฐ˜ํ™˜

  • remove() : front์— ์œ„์น˜ํ•œ ์›์†Œ ์ œ๊ฑฐ ํ›„ ๋ฐ˜ํ™˜, ํ ๋น„์—ˆ๋‹ค๋ฉด exception

  • pq.removeIf(n -> (n % 2 == 0));

    • pq : [1, 2, 3, 4, 5] -> pq : [1, 3, 5]
  • remove(E element) : ํŠน์ • ์›์†Œ ์ œ๊ฑฐ, ์‚ญ์ œํ•˜๋ ค๋Š” ์›์†Œ ํ์— ์—†์œผ๋ฉด false ๋ฐ˜ํ™˜

  • removeAll(collection<?>) : ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ค€ ์ปฌ๋ ‰์…˜์˜ ๊ฒน์น˜๋Š” ์›์†Œ๋ฅผ ์ œ๊ฑฐ

์ ‘๊ทผ

  • peek() : ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜, ํ ๋น„์–ด์žˆ๋‹ค๋ฉด null ๋ฐ˜ํ™˜

  • iterator() : ๋ฐ์ดํ„ฐ ์ง€์šฐ์ง€ ์•Š๊ณ  ์ˆœํšŒํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ

1
2
3
4
5
6
7
8
//pq : [1, 3, 2]

Iterator<Integer> iter = pq.Iterator();
while(iter.hasNext()) {
	Integer i = iter.next();
	System.out.Print(i + " ");
}
// ์ถœ๋ ฅ : 1 3 2

๊ธฐํƒ€

  • size() : ์‚ฌ์ด์ฆˆ

  • toArray() : ํ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด๋กœ ๊ฐ€์ ธ์˜ด


๋” ๋งต๊ฒŒ - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์šฐ์„ ์ˆœ์œ„ ํ์—์„œ poll์„ 2๋ฒˆํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ฐ’์€ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’, ๊ทธ ๋‹ค์Œ์€ ๋‘ ๋ฒˆ์งธ๋กœ ์ž‘์€ ๊ฐ’์ด ๋œ๋‹ค. ์ด ๋‘ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋‹ค์‹œ ์šฐ์„ ์ˆœ์œ„ ํ์— ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

์ด ๊ตฌ์กฐ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๊ฐ€ K๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

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
import java.util.*;
class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        
        for(int scovilles : scoville)
        {
            pq.offer(scovilles);
        }
        
        while(pq.size() > 1 && pq.peek() < K)
        {
            int fir = pq.poll();
            int sec = pq.poll();
            int total = fir + (sec * 2);
            pq.add(total);
            answer++;
        }
        
        if(pq.peek() < K && pq.size() <= 1)
        {
            return -1;
        }
        
        return answer;
    }
}


๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

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
29
30
31
32
import java.util.*;
class Solution {
    public int solution(int[][] jobs) {
        int answer = 0; // ์ด ๋Œ€๊ธฐ์‹œ๊ฐ„์˜ ํ•ฉ์„ ์ €์žฅ
        int time = 0; // ํ˜„์žฌ ์‹œ๊ฐ„
        int idx = 0; // ํ˜„์žฌ ์ฒ˜๋ฆฌ ์ค‘์ธ ์ž‘์—…์˜ ์ธ๋ฑ์Šค
        int len = jobs.length; // ์ž‘์—…์˜ ๊ฐœ์ˆ˜
        
        Arrays.sort(jobs, (o1,o2) -> (o1[0]-o2[0])); // ์š”์ฒญ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        
        PriorityQueue<int[]> pq = new PriorityQueue<>((o1,o2)-> o1[1]-o2[1]); // ์†Œ์š” ์‹œ๊ฐ„์ด ์งง์€ ์ž‘์—…๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ 
        
        while(!pq.isEmpty() || idx < len) // ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ž‘์—…์ด ๋‚จ์•„ ์žˆ์„ ๋•Œ๊นŒ์ง€
        {
            while(idx < len && jobs[idx][0] <= time) // ํ˜„์žฌ ์‹œ๊ฐ„๋ณด๋‹ค ์š”์ฒญ ์‹œ๊ฐ„์ด ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž‘์—…์„ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ถ”๊ฐ€
            {
                pq.offer(jobs[idx++]); // ์ž‘์—…์„ ํ์— ๋„ฃ๊ณ  idx 1 ์ฆ๊ฐ€
            } 
            if(pq.isEmpty()) // ํ๊ฐ€ ๋น„์—ˆ๋‹ค๋ฉด ๋‹ค์Œ ์ž‘์—…์ด ์š”์ฒญ๋œ ์‹œ์ ์œผ๋กœ ์‹œ๊ฐ„ ์ด๋™
            {
                time = jobs[idx][0];
            }
            else{
                int[] job = pq.poll();
                time += job[1];
                answer += time - job[0];
            }
        }
            
        return answer / len;
    }
}


์ด์ค‘์šฐ์„ ์ˆœ์œ„ํ - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

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
29
30
31
32
33
34
import java.util.*;
class Solution {
    public int[] solution(String[] operations) {
        int[] answer = {0,0};
        PriorityQueue<Integer> max = new PriorityQueue<Integer>(Collections.reverseOrder());
        PriorityQueue<Integer> min = new PriorityQueue<Integer>();
        
        for(int i=0;i<operations.length;i++)
        {
            String[] str = operations[i].split(" ");
            int num = Integer.valueOf(str[1]);
            if(str[0].equals("I"))
            {
                max.offer(num);
                min.offer(num);
            }
            else if(str[0].equals("D") && num == 1 && !max.isEmpty())
            {
                min.remove(max.poll());
            }
            else if(str[0].equals("D") && num == -1 && !min.isEmpty())
            {
                max.remove(min.poll());
            }
        }
        if(!min.isEmpty() && !max.isEmpty())
        {
            answer[0] = max.peek();
            answer[1] = min.peek();
        }
        
        return answer;
    }
}

์ฐธ๊ณ  ๐Ÿ™‡๐Ÿปโ€โ™€๏ธ

๋ธ”๋กœ๊ทธ - https://st-lab.tistory.com/205

๋ธ”๋กœ๊ทธ - https://velog.io/@suk13574/์ž๋ฃŒ๊ตฌ์กฐJava-ํž™heap

This post is licensed under CC BY 4.0 by the author.