import heapq as hq
def solution(operations):
ops1 = []
ops2 = []
for op in operations:
ops1.append(op.split(' ')[0]) # I&O
ops2.append(op.split(' ')[1]) # 숫자
answer = []
hqs = []
i =0
for op1, op2 in zip(ops1, ops2):
op2 = int(op2)
####
if (len(hqs) == 0) & (op1 == 'D'): # 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시
pass
else:
if op1 =='I':
hq.heappush(hqs, op2)
elif op1 == 'D':
# print(op2)
if op2 < 0: # 큐에서 최솟값을 삭제합니다.
hq.heappop(hqs)
elif op2 > 0 : # 큐에서 최댓값을 삭제합니다.
max_heap = []
for item in hqs:
hq.heappush(max_heap, (-item, item))
temp_max = hq.heappop(max_heap)[1] # [1] # 최대값 제거
hqs.remove(temp_max)
print(hqs)
try:
max_heap = []
for item in hqs:
hq.heappush(max_heap, (-item, item))
max_item = hq.heappop(max_heap)[1]
answer.append(max_item)
answer.append(hq.heappop(hqs))
except:
answer = [0,0]
return answer
쉬워서 별도 언급 X
def solution(array, commands):
answer = []
for i2,comm in enumerate(commands):
i = comm[0] - 1
j = comm[1]
k = comm[2] - 1
new_array = array[i:j]
new_array.sort()
# print(new_array)
answer.append(new_array[k])
return answer
단순히 가능한 순열 생성후 최고 값을 가져온다? 그럼 시간 초과.
숫자 1000개의 순열의 경우의 수는 1000! 정도이다.
n log n(이진탐색트리) 계산 복잡도의 방법만 문제에서 정답으로 허용한다.
import functools
def comp(n1, n2):
if int(str(n1) + str(n2)) < int(str(n2) + str(n1)):
return 1
elif int(str(n1) + str(n2)) > int(str(n2) + str(n1)):
return -1
return 0
def solution(numbers):
numbers.sort(key=functools.cmp_to_key(comp))
# cmp_to_key : 정렬 함수의 key 매개변수에 함수(func)를 전달할 때 사용하는 함수이다.
# 단, func 함수는 두 개의 인수를 받아들이고,
# 첫번째 인수를 기준으로 그들을 비교하여,
# 작으면 음수, 같으면 0, 크면 양수를 반환하는 비교 함수이어야 한다.
# https://wikidocs.net/109303
return str(int("".join(str(_) for _ in numbers)))