제자리에서 중복 제거하기
느린 포인터와 빠른 포인터를 함께 사용합니다
제자리에서 중복 제거하기은(는) CoddyKit의 무료 Competitive Programming Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Competitive Programming Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
제자리에서 중복 제거하기
정렬된 배열이 주어졌을 때 추가 배열 없이 각 값 하나만 남기십시오. 제자리에서 처리하면 메모리를 절약할 수 있으며, 면접에서 자주 나오는 고전적인 문제입니다. 🧹
정렬이 도움이 되는 이유
배열이 정렬되어 있으면 모든 중복값이 같은 값 옆에 놓입니다. 따라서 전체 배열이 아니라 이웃한 값끼리만 비교하면 됩니다.
두 역할, 두 포인터
마지막으로 유지한 값을 가리키는 느린 포인터와, 앞을 훑으며 새로운 값을 찾는 빠른 포인터를 사용하십시오.
slow = 0
fast = 1느린 포인터가 기록합니다
느린 포인터를 기록 위치라고 생각하십시오. 그 위치와 그 앞에 있는 모든 값은 이미 정리되어 중복이 없습니다.
빠른 포인터가 읽습니다
빠른 포인터는 앞쪽을 읽기만 합니다. 빠르게 앞서 나가다가 아직 유지하지 않은 값을 발견했을 때만 느린 포인터에 알립니다.
반복값 건너뛰기
a[fast]가 a[slow]와 같으면 반복값이므로 빠른 포인터만 앞으로 이동하고 아무것도 하지 않습니다. 중복값은 조용히 건너뜁니다.
for fast in range(1, n):
if a[fast] == a[slow]:
continue새로운 값 발견
a[fast]가 다르면 느린 포인터를 앞으로 이동하고 그 위치에 새 값을 복사하십시오. 이렇게 하면 기존 중복값이 새로운 고유 데이터로 덮어써집니다.
else:
slow += 1
a[slow] = a[fast]답은 길이입니다
순회가 끝난 뒤 slow + 1은 배열 앞부분에 모여 있는 고유한 값의 개수입니다.
return slow + 1뒤쪽은 무시하기
고유한 접두 부분 뒤에 있는 값은 남은 불필요한 데이터입니다. 문제에서는 처음 slow + 1개의 원소만 중요하므로 뒤쪽은 그대로 두십시오.
빈 배열에 주의하기
빈 배열에는 고유한 값이 없습니다. 시작하기 전에 n == 0인지 확인하여 배열 끝을 넘어 읽지 않도록 하십시오.
if n == 0:
return 0한 번의 순회, 추가 공간 없음
이 느린 포인터와 빠른 포인터 패턴은 O(n) 시간과 O(1)의 추가 공간으로 동작합니다. 이는 메모리 제한이 엄격할 때 정확히 필요한 방식입니다.
간단히 확인하기
정렬된 배열에서 느린 포인터와 빠른 포인터를 사용해 제자리에서 중복값을 제거하고 있습니다.
복습
정렬된 배열에서는 느린 포인터와 빠른 포인터 쌍으로 추가 공간 없이 O(n) 한 번의 순회에 중복값을 제거하고, 고유한 값의 개수로 slow + 1을 반환합니다. 🎉
자주 묻는 질문
“제자리에서 중복 제거하기” 강의는 무료인가요?
네 — “제자리에서 중복 제거하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 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개 중 3번째 강의입니다.
“제자리에서 중복 제거하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Competitive Programming Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Competitive Programming Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 정렬된 배열에서 투 포인터
- 주어진 합을 만드는 쌍 찾기
- 제자리에서 중복 제거하기
- 정렬된 두 시퀀스 병합하기