겹침이 없도록 제거하는 최소 횟수
가장 이른 종료를 우선 보존하는 탐욕적 일정 배치를 사용합니다
겹침이 없도록 제거하는 최소 횟수은(는) CoddyKit의 무료 Competitive Programming Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Competitive Programming Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
제거 목표
겹치는 구간들이 있을 때 더 이상 서로 겹치지 않도록 최소한의 제거를 수행하려고 합니다. 가능한 한 많이 남겨 두십시오. ✂️
문제 뒤집기
최소한으로 제거하는 것은 겹치지 않는 구간을 최대한 많이 유지하는 것과 같습니다. 유지하는 문제를 해결한 뒤, 제거 횟수는 n에서 유지한 개수를 뺀 값으로 구합니다.
활동 선택 문제
겹치지 않는 구간을 최대한 많이 유지하는 것은 고전적인 활동 선택 문제를 다른 모습으로 표현한 것입니다. 같은 그리디 아이디어로 두 문제를 모두 해결할 수 있습니다.
끝나는 시점으로 정렬하기
여기서 가장 좋은 순서는 시작 시점이 아니라 끝나는 시점순입니다. 일찍 끝내야 다음에 유지할 수 있는 구간을 위해 시간 흐름을 가장 빨리 비울 수 있습니다.
intervals.sort(key=lambda x: x[1])그리디 선택
아직 호환되는 구간 중 가장 일찍 끝나는 구간을 항상 유지하십시오. 그러면 나머지 구간을 위한 공간이 최대한 많이 남습니다.
마지막으로 유지한 구간의 끝 추적하기
마지막으로 유지한 구간의 끝 시점을 저장합니다. 다음 구간은 그 시작 시점이 해당 경계 이상일 때만 호환됩니다.
if start >= last_end:
last_end = end제거 횟수 세기
구간이 last_end보다 앞에서 시작하면 충돌하므로 해당 구간을 제외하고 제거 횟수를 1 늘립니다. 그렇지 않으면 유지합니다.
else:
removed += 1가장 일찍 끝나는 구간이 이기는 이유
교환 논리로 증명할 수 있습니다. 유지한 구간을 호환되는 구간 중 가장 일찍 끝나는 구간으로 바꾸어도 유지할 수 있는 구간의 수는 절대 줄어들지 않습니다.
맞닿는 경계 처리하기
[1, 2]와 [2, 3]을 겹치는 것으로 셀지 결정하십시오. 끝점만 공유하는 것이 허용된다면 테스트에 start >= last_end를 사용하십시오.
전체 그리디 과정
끝나는 시점순으로 정렬하고 한 번 훑으면서 충돌을 셉니다. 전체 비용은 정렬에 필요한 O(n log n)과 한 번의 선형 순회로 이루어집니다.
removed = 0; last_end = float('-inf')
for s, e in intervals:
if s >= last_end: last_end = e
else: removed += 1익숙한 형태
이 패턴은 한 방에서 최대한 많은 회의를 배정하거나 한 기계에서 최대한 많은 작업을 처리할 때 사용됩니다. 충돌을 최소화해야 하는 상황에서 이 패턴을 알아보십시오.
빠른 확인
겹치지 않는 구간을 그리디하게 유지합니다.
복습
최소 제거 횟수는 n에서 유지할 수 있는 최대 개수를 뺀 값입니다. 끝나는 시점순으로 정렬하고, 가장 일찍 끝나면서 호환되는 구간을 그리디하게 유지한 뒤 나머지를 셉니다. 🚀
자주 묻는 질문
“겹침이 없도록 제거하는 최소 횟수” 강의는 무료인가요?
네 — “겹침이 없도록 제거하는 최소 횟수” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Competitive Programming Academy 강의 전체를 잠금 해제할 수 있습니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“겹침이 없도록 제거하는 최소 횟수”에서 뭘 배우나요?
가장 이른 종료를 우선 보존하는 탐욕적 일정 배치를 사용합니다 브라우저에서 직접 실행하는 실습 코드로 Competitive Programming Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Competitive Programming Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Competitive Programming Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“겹침이 없도록 제거하는 최소 횟수” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Competitive Programming Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Competitive Programming Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 시작점으로 구간 정렬하기
- 겹치는 구간 병합하기
- 최대 겹침을 위한 선분 스위프
- 겹침이 없도록 제거하는 최소 횟수