Algorithms

코딩 테스트 대비 개념 정리 - Python

짤진이 2024. 5. 7. 08:22
반응형

힙(heap)

힙 생성, 원소 추가, 삭제

파이썬 heqpq 모듈은 heapq (priority queue) 알고리즘을 제공한다.

import heapq

# 빈 리스트에 heap 형식으로 추가
heap = []
heapq.heappush(heap, 50) # 빈 heap에 50 추가
heapq.heappush(heap, 10)
heapq.heappush(heap, 20)

# 리스트를 heap으로 변환하기
heap2 = [50 ,10, 20]
heapq.heapify(heap2)

# heap에서 원소 삭제
result = heapq.heappop(heap)

 

최대 힙 만들기

문제를 풀다보면 최솟값을 찾는 문제도 있지만 최댓값을 찾는 유형도 꽤 있다.

이때 최대 힙을 만드는 방법을 알고 있다면 수월하게 문제를 풀 수 있다.

heap_items = [1,3,5,7,9]

max_heap = []
for item in heap_items:
  heapq.heappush(max_heap, (-item, item))

print(max_heap)

 

위 결과를 사용하게 될때 (-9, 9) , (-7, 7) ... (-1, 1) 순서대로 뽑아 쓸 수 있기 때문에 1번 index를 추출해주면 최대 힙이 된다.

 

큐(queue)

큐(queue)는 선입선출, FIFO(First In First Out) 기반의 매우 유명한 자료구조이다.

큐를 사용하면 데이터를 추가한 순서대로 제거할 수 있기 때문에 자주 사용한다.

일반 큐는 list를 사용할 때 사용하지만 리스트의 제일 왼쪽을 제거하거나 추가할 때 deque를 사용할 때가 있는데 정말 유용하다.

from collections import deque

queue = deque([4, 5, 6])
queue.append(7)
queue.append(8)

print(queue) # deque([4, 5, 6, 7, 8])

queue.popleft() # 4
queue.popleft() # 5

print(queue) # deque([6, 7, 8])

 

위는 deque.popleft()를 사용해 리스트의 가장 왼쪽에 있는 값, 즉 가장 먼저 들어온 값을 제거하는 방법이다.

 

🎱지금까지 pop은 리스트의 가장 오른쪽 값만 제거해주는 줄 알았지만....!

a = [1,2,3,4]
print(a.pop(1))
print(a) #[1,3,4]

 

위의 예시와 같이 특정 index 값을 제거해줄 수 있었다,,,,! 

이것은 코딩테스트를 준비하다가 새로 알게된 사실이다...

from collections import deque

queue = deque([4, 5, 6])
queue.appendleft(3)
queue.appendleft(2)
print(queue)  # deque([2, 3, 4, 5, 6])

queue.pop()
queue.pop()
print(queue)  # deque([2, 3, 4])

 

위는 deque.appendleft()를 사용하여 리스트의 가장 왼쪽에 값을 추가하는 방법이다.

 

for - else 문

for i in range(5):
    print(i, end=' ')
else:
    print("for문이 끝까지 실행됐습니다!")

# 결과 : 0\n 1\n 2\n 3\n 4\n "for문이 끝까지 실행됐습니다!" 

for i in range(5):
    if i == 2:
        break
    print(i, end=' ')
else:
    print("for문이 끝까지 실행됬습니다!")
# 결과 : 0\n 1\n

 

반응형