[ ๋ฌธ์ ]
https://www.acmicpc.net/problem/7662
7662๋ฒ: ์ด์ค ์ฐ์ ์์ ํ
์ ๋ ฅ ๋ฐ์ดํฐ๋ ํ์ค์ ๋ ฅ์ ์ฌ์ฉํ๋ค. ์ ๋ ฅ์ T๊ฐ์ ํ ์คํธ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋๋ค. ์ ๋ ฅ์ ์ฒซ ๋ฒ์งธ ์ค์๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์๋ฅผ ๋ํ๋ด๋ ์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ๋ฐ์ดํฐ์ ์ฒซ์งธ ์ค์๋ Q์ ์
www.acmicpc.net
[ ๋์ ํ์ด ]
๐ธ ์ ๊ทผ ๋ฐฉ๋ฒ
์ต์ํ, ์ต๋ํ์ ์ ์ธํ๊ณ ์ฐ์ฐ์ด I์ธ ๊ฒฝ์ฐ์ ๊ฐ์ ํด๋น ์ฐ์ฐ์ด ๋ช๋ฒ์งธ์ธ์ง ๊ฐ๊ณผ ํจ๊ป ์ ์ฅํ๋ค.
๊ฐ์ ์ ๊ฑฐํ๋ฉด removed ๋ฆฌ์คํธ์์ ์ ๊ฑฐํ ๊ฐ์์ ํ์ํ๋ค. ์ต์๊ฐ, ์ต๋๊ฐ์ ์ ๊ฑฐํ๊ณ ๋ง์ฝ ์ ๊ฑฐํ index์ ๊ฐ์ด๋ฉด ์ ๊ฑฐํ๊ณ ๋ค์ ์ต์๊ฐ, ์ต๋๊ฐ์ ์ฐพ๊ณ ์ ๊ฑฐํ๋ค.
๐ธ ํ์ด ์ฝ๋
# 7662 ์ด์ค ์ฐ์ ์์ ํ
# 221206
import sys, heapq
input = sys.stdin.readline
# ํ
์คํธ ์ผ์ด์ค ์ ์ T
T = int(input())
for _ in range(T):
# ์ ์ฉํ ์ฐ์ฐ์ ๊ฐ์ k
k = int(input())
# ์ฐ์ฐ์ ์ ์ฅํ ์ต์ํMinQ, ์ต๋ํMaxQ
MinQ = list()
MaxQ = list()
# ์ ๊ฑฐํ ๊ฒ ์ฒดํฌํ ๋ฆฌ์คํธ
removed = [False] * k
# k๋ฒ ์ฐ์ฐ์ ๋ฐ๋ณต
for k_idx in range(k):
msg, n = input().split()
# ์ฐ์ฐ์ด 'I'์ธ ๊ฒฝ์ฐ
if msg == 'I':
heapq.heappush(MinQ, (int(n), k_idx))
heapq.heappush(MaxQ, (-int(n), k_idx))
# ์ฐ์ฐ์ด 'D'์ธ ๊ฒฝ์ฐ
else:
# ์ต๋๊ฐ์ ์ญ์ ํ๋ ์ฐ์ฐ
if n == '1':
while MaxQ:
# MaxQ์์ ๊ฐ์ฅ ์์ ๊ฐ => ์ต๋๊ฐ
maxNum, idx = heapq.heappop(MaxQ)
if removed[idx] == False:
removed[idx] = True
break
else: continue
# ์ต์๊ฐ์ ์ญ์ ํ๋ ์ฐ์ฐ
else:
while MinQ:
# MinQ์์ ๊ฐ์ฅ ์์ ๊ฐ => ์ต์๊ฐ
minNum, idx = heapq.heappop(MinQ)
if removed[idx] == False:
removed[idx] = True
break
else: continue
# ์ต๋๊ฐ, ์ต์๊ฐ ์ ์ธ
maxNum, minNum = None, None
# MaxQ๊ฐ ์กด์ฌํ๋ค๋ฉด
while MaxQ:
# ์ต๋๊ฐ ์ฐพ๊ธฐ
maxNum, idx = heapq.heappop(MaxQ)
# ์ง์ฐ์ง ์์ ๊ฐ์ด๋ผ๋ฉด ์ต๋๊ฐ ์ ์ฅ
if removed[idx] == False:
break
# ์ง์ด ๊ฐ์ด๋ผ๋ฉด ์ต๋๊ฐ ์ด๊ธฐํ
else:
maxNum = None
continue
# MinQ๊ฐ ์กด์ฌํ๋ค๋ฉด
while MinQ:
# ์ต์๊ฐ ์ฐพ๊ธฐ
minNum, idx = heapq.heappop(MinQ)
# ์ง์ฐ์ง ์์ ๊ฐ์ด๋ผ๋ฉด ์ต์๊ฐ ์ ์ฅ
if removed[idx] == False:
break
# ์ง์ด ๊ฐ์ด๋ผ๋ฉด ์ต์๊ฐ ์ด๊ธฐํ
else:
minNum = None
continue
if maxNum and minNum :
print(-maxNum, minNum)
else:
print('EMPTY')
[ pair์ ํ์ด ]
๐ธ ์ ๊ทผ ๋ฐฉ๋ฒ
pair๋ ๋๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ์๋ค ๐
๐ธ ํ์ด ์ฝ๋
import heapq
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
a = int(input())
# ๋ฆฌ์คํธ ์์ฑ
max_arr = list()
min_arr = list()
answer = ''
# ์ถ๋ ฅ ์กฐ๊ฑด ๋ณ์ ์์ฑ
check = [False for _ in range(a)]
for idx in range(a):
k, n = input().split()
# ์ฒ์ ๋ฌธ์๊ฐ I ์ผ ๋, ๋ฆฌ์คํธ์ ์ซ์ ์ถ๊ฐ
if k == 'I':
# max ๋ฆฌ์คํธ์ min ๋ฆฌ์คํธ์ ๊ฐ๊ฐ ์ซ์ ์ถ๊ฐ
heapq.heappush(max_arr, (-int(n), idx))
heapq.heappush(min_arr, (int(n), idx))
# ํด๋น ์ธ๋ฑ์ค ์์น์ ์ซ์๊ฐ ์์์ ํ์ธ
check[idx] = True
# ์ฒ์ ๋ฌธ์๊ฐ D ์ผ ๋
else:
# ์ต์๊ฐ ์ ๊ฑฐ
if int(n) == -1:
# max์์ ์ง์์ก๋ ๊ฐ์ ์ ๊ฑฐํ๊ธฐ ์ํ ๋ฐ๋ณต ๊ณผ์
while min_arr and not check[min_arr[0][1]]:
heapq.heappop(min_arr)
# min์ ์ง์ฐ๊ณ ํด๋น index๋ฅผ False๋ก ๋ณ๊ฒฝํ์ฌ ์ง์ ๋ค๋ ๊ฒ์ ์ฒดํฌ
if min_arr:
check[min_arr[0][1]] = False
heapq.heappop(min_arr)
# ์ต๋๊ฐ ์ ๊ฑฐ
else:
# min์์ ์ง์์ก๋ ๊ฐ์ ์ ๊ฑฐํ๊ธฐ ์ํ ๋ฐ๋ณต ๊ณผ์
while max_arr and not check[max_arr[0][1]]:
heapq.heappop(max_arr)
# max๋ฅผ ์ง์ฐ๊ณ ํด๋น index๋ฅผ False๋ก ๋ณ๊ฒฝํ์ฌ ์ง์ ๋ค๋ ๊ฒ์ ์ฒดํฌ
if max_arr:
check[max_arr[0][1]] = False
heapq.heappop(max_arr)
# ๋ง์ง๋ง์ผ๋ก ํ๋ฒ ๋ ์ํํ์ฌ ์ง์์ก๋ ๊ฐ์ ์ ๊ฑฐ
while min_arr and not check[min_arr[0][1]]:
heapq.heappop(min_arr)
while max_arr and not check[max_arr[0][1]]:
heapq.heappop(max_arr)
if max_arr and min_arr:
answer = str(-max_arr[0][0]) + ' '
answer += str(min_arr[0][0])
else:
answer = 'EMPTY'
print(answer)
pair ์ github : https://github.com/Ui-Seok
'๐ถ Programming > ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ. 11723 ์งํฉ (Python) (0) | 2022.12.09 |
---|---|
BOJ. 9095 1, 2, 3 ๋ํ๊ธฐ (Python) (2) | 2022.12.05 |
BOJ. 12100 2048 (Easy) (Python) (3) | 2022.10.07 |
BOJ. 1725 ํ์คํ ๊ทธ๋จ (Python) (0) | 2022.10.03 |
2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ Lv2. ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ (0) | 2022.09.11 |