[1일 3알고](힙큐,) 이중우선순위큐,K번째수, 가장 큰 수(순열)

2400·2022년 4월 1일
0
post-thumbnail

이중 힙큐

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

K번째수

쉬워서 별도 언급 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)))
profile
공부용 혹은 정리용 혹은 개인저장용

0개의 댓글

관련 채용 정보