-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
27-alstjr7437 #198
27-alstjr7437 #198
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
from heapq import *
t = int(input())
for _ in range(t):
heap = []
q = int(input())
for _ in range(q):
k = list(input().split())
if k[0] == "I" :
heappush(heap, int(k[1]))
else :
if len(heap) == 0:
continue
if int(k[1]) == -1:
heappop(heap)
else :
heap.pop()
if len(heap) == 0 :
print("EMPTY")
else :
print(heap[-1], heap[0])
์ด ๋ก์ง์์ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์๋๋ค...
ํ์ง๋ง ์ ๊ธฐ์ ์ต๋ ๊ฐ์ ๋นผ๋ ค๊ณ heap.pop()
์ ํ์ ๊ฑฐ๋ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๋ฒฝํ ์ดํดํ์ง ๋ชปํ๊ณ ์ฌ์ฉํ ๊ฒ ๊ฐ์ต๋๋ค!!
์ง๊ธ์ ์ ๋ก์ง์ด ์ ์๋ชป๋์๋ ์ง ์์๊ฒ ์ฃ ...?!
์๊ฐ์ด๊ณผ๊ฐ ์๋๋๋ผ๋ ํ๋ ธ์ต๋๋ค๋ก ์ถ๋ ฅ๋์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋ ์ด๊ฑฐ ์ฌ๋ฌ๊ฐ์ง ์๊ฐ ๋ค์ด์์ ๋์ ๋๊ธฐํ๋ฅผ ์๊ฐํด์ ์ฒ์์๋ ์งํฉ์ผ๋ก ์ ๊ทผํ๋ค๊ฐ,
2๊ฐ ์ด์์ ์๊ฐ ๋ค์ด์ค๊ณ ํ๋์ ์๊ฐ ๋น ์ก์ ๋ ์งํฉ์ผ๋ก ์ ์ฅ๋๋ฉด ๊ทธ๋ฅ ๋จ์์๋ ์๋ ์๋ ์ ์ทจ๊ธํ๊ณ ์ ๊ฑฐ๋๊ธฐ ๋๋ฌธ์ ๋์ ๋๋ฆฌ๋ก ๋ฐ๊ฟ์ ์ ์ถํ๋๋ solved ๋์์ต๋๋ค!
from heapq import *
from collections import defaultdict
import sys
def input(): return sys.stdin.readline().rstrip()
T = int(input())
for _ in range(T):
K = int(input())
min_heap = []
max_heap = []
elements = defaultdict(int)
for _ in range(K):
query = input()
method, value = query.split()
if method == "I":
heappush(min_heap, int(value))
heappush(max_heap, -1*int(value))
elements[int(value)] += 1
elif method == "D":
if len(elements) == 0: continue
# ์ต์๊ฐ
if value =="-1":
while min_heap[0] not in elements:
heappop(min_heap)
popped = heappop(min_heap)
elements[popped] -= 1
if elements[popped] == 0: del elements[popped]
# ์ต๋๊ฐ
elif value =="1":
while -1*max_heap[0] not in elements:
heappop(max_heap)
popped = heappop(max_heap)
elements[-1*popped] -= 1
if elements[-1*popped] == 0: del elements[-1*popped]
if len(elements) == 0: print("EMPTY")
else:
remain = sorted(list(elements))
print(remain[-1], remain[0])
ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ ๋ ์ ์ฉํ๊ฒ ๋ค์.... ์ฌ๋ฏธ์์ด์.
ํนํ ํ์ด์ฌ์ผ๋ก ์ฐ์ ์์ ํ๋ฅผ ๊ณต๋ถํ ๋ ์์ฒญ ์ ์ฉํ ๋ฌธ์ ๊ฐ์์.
์ ์ด์ฃผ์ ๊ฒ์ฒ๋ผ ํ์ด์ฌ์์ ์ต๋ ๊ฐ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ ๋ฐ ์ก ๊ธฐ์ ์ ์ฌ์ฉํด์ผํ๋๋ฐ,
์๋นํ ์์ฃผ์ฐ์ด๊ธฐ ๋๋ฌธ์ด์์!
๊ณ ์ํ์ จ์๋๋ฅ~~ ๐๐ป๐๐ป
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ ๋ง ์์ธํ PR... ๋๋ฌด ๊ฐ์ฌํฉ๋๋ค!!
์ ๋ ๋งต(๋์
๋๋ฆฌ)์ผ๋ก ์ ์ฅํด์ ๊ด๋ฆฌํ์ต๋๋ค...!
poll ํ ๊ฐ์ count ๊ฐ 0 ์ดํ์ด๋ฉด (์ด๋ฏธ ๋ค ๋น ์ก์ผ๋ฉด) ๋ค์ poll ํ๊ณ ๋ฅผ ๋ฐ๋ณตํด์ ๋๊ธฐํ์์ผ์คฌ์ต๋๋ค!
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.Collections
import java.util.PriorityQueue
lateinit var br: BufferedReader
fun main() {
br = BufferedReader(InputStreamReader(System.`in`))
val T = br.readLine().toInt()
repeat(T) {
program()
}
}
private fun program() {
val pqMin = PriorityQueue<Int>()
val pqMax = PriorityQueue<Int>(Collections.reverseOrder())
val k = br.readLine().toInt()
val store = mutableMapOf<Int, Int>()
for (i in 0 until k) {
val input = br.readLine().split(" ")
val instruction = input[0]
val n = input[1].toInt()
if (instruction == "I") {
pqMin.add(n)
pqMax.add(n)
store[n] = store.getOrPut(n) { 0 } + 1
continue
}
if (n == -1) {
delete(pqMin, store)
} else {
delete(pqMax, store)
}
}
var max = pqMax.poll()
var min = pqMin.poll()
if (max == null || min == null) {
println("EMPTY")
return
}
while (store[max]!! <= 0) {
max = pqMax.poll()
if (max == null) {
println("EMPTY")
return
}
}
while (store[min]!! <= 0) {
min = pqMin.poll()
if (min == null) {
println("EMPTY")
return
}
}
println("$max $min")
}
private fun delete(pq: PriorityQueue<Int>, store: MutableMap<Int, Int>) {
val target: Int = pq.poll() ?: return
if (store[target]!! <= 0) {
delete(pq, store)
return
}
store[target] = store[target]!! - 1
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์์ธํ PR ๊ฐ์ฌํฉ๋๋ค ~~
์ ๋ ์ผ๋จ 1ํธ๋ ์๊ฐ ์ด๊ณผ ๋์์ต๋๋ค..
1ํธ์์๋ D 1์ด ๋์ฌ ๋๋ง๋ค ์ต๋ํ์ผ๋ก ๋ฐ๊ฟ์ค ํ popํ๊ณ , ๋ค์ ์ต์ํ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ณผ์ ์ ๋ฃ์์ต๋๋ค.
1 try
import sys
import heapq
def input(): return sys.stdin.readline().rstrip()
T = int(input())
def transform_heap(h):
return [-x for x in h]
for t in range(T):
k = int(input())
heap = []
command = [input().split() for _ in range(k)]
for i in range(k):
if command[i][0] == "I":
heapq.heappush(heap, int(command[i][1]))
elif command[i][0] == "D" and int(command[i][1]) == 1:
if len(heap) > 0:
heap = transform_heap(heap) # ์ต๋ ํ์ผ๋ก ๋ฐ๊ฟ์ค
heapq.heapify(heap)
heapq.heappop(heap)
heap = transform_heap(heap) # ์ต์ ํ์ผ๋ก ๋๋๋ฆฌ๊ธฐ
heapq.heapify(heap)
else: continue
elif command[i][0] == "D" and int(command[i][1]) == -1:
if len(heap) > 0:
heapq.heappop(heap)
else: continue
else:
print("error") # ํ์ธ์ฉ
if len(heap) > 0:
print(heap[0], heap[len(heap)-1])
else:
print("EMPTY")
D 1์ด ๋์ฌ ๋๋ง๋ค ์ต๋ํ์ผ๋ก ๋ฐ๊ฟ์ค์ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ ๊ฐ์์ ํด๋น ๋ถ๋ถ์ด O(n)์ด๋ผ์?
๊ทธ๋์ ์ผ๋จ ์ต์ ํ์ผ๋ก๋ ์ต๋๊ฐ์ popํ ์ ์๊ฒ ๋ค ์ถ์ด์
์ฒ์๋ถํฐ ์ต๋ ํ, ์ต์ ํ์ผ๋ก ๋๊ณ ๋์ด ๊ณตํต์ธ ๋ถ๋ถ๋ง ์ต์ข
์ ์ผ๋ก list์ ๋ด์์ฃผ๋ฉด ๋๊ฒ ๋ค !
๋ผ๊ณ ์๊ฐํ์จ๋ค
- ์ ๋ ฅํ ๋๋ง๋ค min_heap์ max_heap์ push.
- D -1 ์ด๋ฉด min_heap์์ pop
- D 1 ์ด๋ฉด max_heap์์ pop
- min_heap๊ณผ max_heap์ ๊ณตํต์ ์ผ๋ก ์๋ ๊ฒ๋ง ๊ณจ๋ผ์ heap์ ์ ์ฅํ๊ณ ์ถ๋ ฅ
๊ทธ๋ ๊ฒ 2ํธ ํ๋๋ฐ ๋ต์ด ์๋์ค๋๋ผ๊ณ ์. ๋๊ธฐํ ๋ก์ง์ด ์๋ชป๋ ๊ฒ ๊ฐ์์ ๐ซ
2 try
import sys
import heapq
def input(): return sys.stdin.readline().rstrip()
T = int(input())
def transform_heap(h):
return [-x for x in h]
for t in range(T):
k = int(input())
heap = []
max_heap = []
min_heap = []
command = [input().split() for _ in range(k)]
for i in range(k):
if command[i][0] == "I":
heapq.heappush(max_heap, -int(command[i][1]))
heapq.heappush(min_heap, int(command[i][1]))
elif command[i][0] == "D" and int(command[i][1]) == 1:
if len(max_heap) > 0:
heapq.heappop(max_heap)
else: continue
elif command[i][0] == "D" and int(command[i][1]) == -1:
if len(min_heap) > 0:
heapq.heappop(min_heap)
else: continue
else:
print("error") # ํ์ธ์ฉ
max_len = max(len(max_heap), len(min_heap))
if len(max_heap) == max_len:
for i in max_heap:
if -i in min_heap:
heap.append(-i)
else:
for i in min_heap:
if -i in max_heap:
print("here", i)
heap.append(i)
if len(heap) > 0:
print(heap[0], heap[len(heap)-1])
else:
print("EMPTY")
์ด์ ์ด๋ป๊ฒ ํด์ผํ ์ง ์๊ฐ์ด ์๋์ ๋ฏผ์๋ PR ์ฐธ๊ณ ํ์ต๋๋ค..
๋ฐ๋ก True, False๋ฅผ ์ ์ฅํ list๋ฅผ ๋ง๋ค์ด ์ค์ผ ํ๋๊ตฐ์ฉ .. ๋ฐฐ์๊ฐ๋๋ค ... ๐
๋๋ถ์ heap ๋ณต์ตํ๊ณ ๊ฐ๋๋ฅ
์คํธ 2๋ฒ์งธ ๋ฐฉ๋ฒ ์ ๊ธฐํ๋ค์!! |
๐ ๋ฌธ์ ๋งํฌ
์ด์ค ์ฐ์ ์์ ํ
์๋ ์๊ฐํด๋ณด๋ ๋ฌธ์ ์ด๋ฆ๋ถํฐ ์๊ณ ๋ฆฌ์ฆ ์คํฌ์ธ๋ฐ์?
โ๏ธ ์์๋ ์๊ฐ
1์๊ฐ 30๋ถ
์๊ณ ๋ฆฌ์ฆ
์ฐ์ ์์ ํ
โ ํ๋ฆฐ ์๋ ์ฝ๋
ํ์ง๋ง Heap.pop()์ ํ๊ฒ ๋๋ฉด heap ์๊ฐ๋ณต์ก๋๊ฐ O(1)์ ๋ง์ง๋ง ํ ๊ตฌ์กฐ๋ฅผ ์ ์งํ์ง ๋ชปํฉ๋๋ค!!
๊ทธ๋ฐ๋ฐ ์ด์ํ๊ฒ ์๊ฐ ์ด๊ณผ๊ฐ ๋จ๋๋ฐ ์๊ทธ๋ฌ๋์ง ์์ค๊น์ฌ...?
์ฐ์ ์ ์ผ๋ก ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ํด์ max๋ min heap์ ๋ง๋ค์ด์ผ ํ๋ค๋๊ฑด ์์์ต๋๋ค!!
โก๏ธ Python์์๋ ์ต์ Heap๋ง ์ง์์ ํด์!!!
์ต์ ํ (Min-Heap): ๊ธฐ๋ณธ ํ, ์ต์๊ฐ ์ ์ฅ
์ต๋ ํ (Max-Heap): ์์ ์์ ์ ์ฅ, ์ต๋๊ฐ ์ ์ฅ
ํ์ง๋ง ์์ ๊ฐ์ด minheap, maxheap์ ๋ง๋ค์ด์
min๊ฐ์ด ์์ด์ง๋ฉด Max๋ ์์ด์ ธ์ผ ํ๋ ๋๊ธฐํ๊ฐ ํ์ํ์ต๋๋ค.
์ด๋ถ๋ถ์์ ๋ง์ด ๋งํ์ ์ธํฐ๋ท์ ์ฐธ๊ณ ํ๋ ์ด๋ค ์ฌ๋์ ๋์ ๋๋ฆฌ๋ก ๋ง๋ค๊ณ
์ด๋ค ์ฌ๋์ ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค.
์ฒ์์๋ ๋์ ๋๋ฆฌ๋ฅผ ์ด์ฉํ๋ ค ํ์ง๋ง ๋งํ๋ ๋ถ๋ถ์ด ๋ง์์
q๋ก ๋ฐ๋ ๋ช ๋ น์ด์ ๊ฐ์ ๋งํผ nums๋ผ๋ ๋๊ธฐํ๋ฅผ ์ํ ๋ฐฐ์ด์ ์ ์ธํด์คฌ์ต๋๋ค!!!
๊ทธ๋์ ๋ง๋ ์ฝ๋๊ฐ
heap์ ์ถ๊ฐํ๋ ๋ถ๋ถ
min_heap์ ๊ธฐ๋ณธ heap์ด ์ต์ ํ์ด๋ฏ๋ก ๊ทธ๋๋ก ์ฝ์ ํด์ฃผ๊ณ ๋ค์ ๋๊ธฐํ๋ฅผ ์ํ i๋ผ๋ Index๋ฅผ ๋ฃ์ด์คฌ์ต๋๋ค.
max_heap์ -๋ฅผ ๋ถ์ฌ์ค์ผ ์ ์ผ ํฐ ์๊ฐ ๋น ์ง๋ฏ๋ก -iNum์ ๋ฃ์ด์คฌ์ต๋๋ค.
โญ๏ธโญ๏ธโญ๏ธ ์ญ์ ๋ก์ง
์ฒ์ heap ๊ตฌ์กฐ
๋ค์ด์ค๋ ๋ช ๋ น์ด D -1(์ต์), D 1(์ต๋), D -1(์ต์)
์ต์ ํ
-> 30์ด ๋จ๊ฒ ๋จ ์ต์ ํ์
์ต๋ ํ
-> ์ต๋ ํ์ 40์ด ๋จ๊ฒ ๋จ
heap์ ์ต๋๊ฐ ์ญ์ ํ๋ ๋ถ๋ถ - D 1
while๋ฌธ์ max_heap์ด ๋จ์์๊ณ ,
maxheap์ ์๋ถ๋ถ(์์์๋ 50)์ด ์ด๋ฏธ ๋ฒ๋ ค์ ธ ์์ผ๋ฉด pop์ผ๋ก ๋ฒ๋ ค๋ฒ๋ฆฌ๊ธฐ -> ๋๊ธฐํ๋ฅผ ์ํด์
if ๋ฌธ์
max_heap์์ ์์์ ์ ๊ฑฐ -> ์ต๋ ํ์ผ๋ก ์ ์ผ ํฐ ์ ๋ฒ๋ฆฌ๊ธฐ
heap์ ์ต์๊ฐ ์ญ์ ํ๋ ๋ถ๋ถ - D -1
์์ ์ต๋ํ๊ณผ ๊ฐ์ ๋ก์ง์ผ๋ก ๋์๊ฐ
๋ชจ๋ ์ฐ์ฐ ํ ๋๊ธฐํ ๋์ง ์์ ๋ ธ๋ ์ฒ๋ฆฌ
์์ ์ญ์ ๋ก์ง๊ณผ ๋๊ฐ์ด min, max heap์ ์๋ถ๋ถ์ ํ์ธํ๊ณ ๋๊ธฐํ๋์ด ์์ง ์์ผ๋ฉด
๋ ธ๋๋ค์ ์ญ์ ํจ
โญ๏ธโญ๏ธโญ๏ธ ๋๊ธฐํ์ ์ค์์ฑ
์ฒ์ heap ๊ตฌ์กฐ
๋ค์ด์ค๋ ๋ช ๋ น์ด D -1(์ต์), D -1(์ต์), D 1(์ต๋), D 1(์ต๋)
์ต์ ํ
๋๊ธฐํ while ๋ฌธ ์ฒ๋ฆฌ โก๏ธ heap[0][1]์ด False๋ฉด pop์ ํด๋ฒ๋ฆผ โก๏ธ 2๊ฐ ๋ค ๋น ์ง
Empty๊ฐ ๋จ!!!
์ต์ ํ
๏ฟฝ์ต๋ ํ๊ณผ ๊ฐ์ ๋ฐฉ์
๐ก ์ต์ข ์ฝ๋
๐ ์๋กญ๊ฒ ์๊ฒ๋ ๋ด์ฉ
python์์ heap์ ์ต์ํ๋ง ์ง์์ ํ๊ฒ ๋๋ ์ฌ์ค์ ์๊ณค ์์์ง๋ง ์ฒด๊ฐํ๋ ์ฐธ ์ด๋ ต๋๊ตฐ์...
๊ทธ๋๋ visited ํํ๋ก ๋๊ณ ๋๊ฐ์ ํ์ ๋๊ธฐํ ํ๋ฉด์ ํธ๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฐ์์ต๋๋ค!!