*문제 출처는 백준에 있습니다.
문제 제목: 최솟값 찾기 / 11003번 (플래티넘 5단계)
문제 사이트: https://www.acmicpc.net/problem/11003
문제 설명
나의 풀이
import heapq
from collections import deque
def solution(lis, l):
# 결과
result = []
# L를 계산할 deque()
q = deque()
for number in lis:
q.append(number)
if len(q) == l + 1:
q.popleft()
# 최소 값을 구할 힙
heap = list(q)
heapq.heapify(heap)
result.append(heapq.heappop(heap))
return result
N, L = map(int, input().split())
arrangement = list(map(int, input().split()))
D = solution(arrangement, L)
for i in D:
print(i, end = " ")
이 풀이는 heapify를 반복적을 사용해서 시간 초과가 발생했다.
시간 복잡도는 O(N * L log L) 가 발생한다.
from heapq import heappush, heappop
N, L = map(int, input().split())
arrangement = [0] + list(map(int, input().split()))
# 최소 값을 구할 힙
heap = []
for i in range(1, N + 1):
heappush(heap, (arrangement[i], i))
value, index = heap[0]
while 1 <= index < i - L + 1:
heappop(heap)
value, index = heap[0]
print(value, end = " ")
이 풀이는 배열을 다시 사용하는 작업을 사용하는 코드다.
시간 복잡도는 O(N log N + N * L) 가 나오는 방식을 사용했다.
※ 알아야 할 것
https://newkimjiwon.tistory.com/179
'코딩테스트(프로그래머스 & 백준) > 백준-Python' 카테고리의 다른 글
백준 / 회의실 배정 / 1931번 / Python (0) | 2024.08.27 |
---|---|
백준 / 그룹 단어 체커 / 1316번 / Python (0) | 2024.08.26 |
백준 / 토마토 / 7576번 / Python (0) | 2024.08.22 |
백준 / 0과 1 / 8111번 / Python (0) | 2024.08.16 |
백준 / 1, 2, 3 더하기 / 9095번 / Python (0) | 2024.08.15 |