고정 크기 윈도 합
O(n)에 길이 k인 윈도를 이동합니다
고정 크기 윈도 합은(는) CoddyKit의 무료 Competitive Programming Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Competitive Programming Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
반복 합 문제
많은 문제에서는 k개의 연속된 요소로 이루어진 모든 블록의 합을 구하라고 합니다. 각 블록을 처음부터 다시 계산하는 것은 비효율적이므로 더 나은 방법을 사용할 수 있습니다. 🪟
먼저 느린 방법 보기
순진한 방법은 길이가 k인 각 윈도의 합을 따로 구하는 것입니다. 이 방법은 작업을 반복하며 O(n × k)의 비용이 들어 큰 입력에서는 너무 느립니다.
for i in range(n - k + 1):
s = sum(a[i:i + k])핵심 통찰
서로 이웃한 윈도는 거의 완전히 겹칩니다. 한 칸 오른쪽으로 이동할 때는 가장 왼쪽 요소 하나를 제거하고 오른쪽에 새 요소 하나를 더하기만 하면 됩니다.
첫 번째 윈도 초기화
먼저 처음 k개 요소의 합을 한 번 구합니다. 이 하나의 합을 윈도가 앞으로 이동할 때마다 계속 갱신하면 됩니다.
window = sum(a[:k])
best = window한 칸 이동하기
윈도를 이동하려면 들어오는 요소를 더하고 나가는 요소를 뺍니다. 그러면 각 단계의 작업량을 일정한 O(1)로 유지할 수 있습니다.
for i in range(k, n):
window += a[i] - a[i - k]답 추적하기
각 이동이 끝날 때마다 지금까지 본 윈도 합의 최댓값처럼 필요한 값을 갱신합니다. 윈도의 값은 항상 즉시 사용할 수 있습니다.
best = max(best, window)전체 비용은 선형
각 요소를 더할 때 한 번, 제거할 때 한 번 더 확인하므로 전체 탐색은 O(n)입니다. 따라서 큰 제한도 쉽게 통과할 수 있습니다.
인덱스에 주의하기
윈도에서 나가는 요소는 a[i - k]이지 a[i - 1]이 아닙니다. 이 오프셋을 올바르게 처리하지 못하는 것이 고정 윈도에서 가장 흔한 오류입니다.
평균은 쉽게 구할 수 있습니다
합이 아니라 윈도의 평균을 최댓값으로 구해야 하나요? 추적 중인 윈도 합을 k로 나누기만 하면 됩니다. 슬라이딩 로직은 전혀 바뀌지 않습니다.
avg = window / k작은 배열 처리하기
배열의 길이가 k보다 짧으면 완전한 윈도가 존재하지 않습니다. 처음에 len(a)와 k를 비교하고 일찍 반환하여 인덱스 오류를 피하십시오.
if n < k:
return None고정 윈도가 적합한 경우
윈도의 길이가 고정되어 있고 합, 개수 또는 간단한 누적 통계처럼 값을 효율적으로 결합할 때 이 패턴을 사용하십시오.
빠른 확인
배열을 가로질러 크기가 k인 윈도를 한 칸씩 오른쪽으로 이동합니다.
정리
첫 번째 윈도를 한 번 초기화한 다음 각 단계에서 더하고 빼면서 O(1)에 이동하십시오. 전체 고정 크기 탐색은 선형 시간에 실행됩니다. ✅
자주 묻는 질문
“고정 크기 윈도 합” 강의는 무료인가요?
네 — “고정 크기 윈도 합” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Competitive Programming Academy 강의 전체를 잠금 해제할 수 있습니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“고정 크기 윈도 합”에서 뭘 배우나요?
O(n)에 길이 k인 윈도를 이동합니다 브라우저에서 직접 실행하는 실습 코드로 Competitive Programming Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Competitive Programming Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Competitive Programming Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“고정 크기 윈도 합” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Competitive Programming Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Competitive Programming Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.