정렬된 배열에서 투 포인터
양 끝을 안쪽으로 움직여 목표를 찾습니다
정렬된 배열에서 투 포인터은(는) CoddyKit의 무료 Competitive Programming Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Competitive Programming Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
두 포인터를 사용하는 이유
두 포인터 기법은 중첩 반복문 대신 두 인덱스로 배열을 훑습니다. 그 결과 많은 O(n^2) 방식이 깔끔한 한 번의 O(n) 순회로 바뀝니다. 🎯
정렬이 핵심입니다
대표적인 방식에서는 정렬된 배열이 필요합니다. 순서가 있으면 오른쪽으로 이동할수록 값이 커지고 왼쪽으로 이동할수록 값이 작아진다고 판단할 수 있으므로, 매 단계가 분명한 선택이 됩니다.
양끝에서 시작하는 두 포인터
한 포인터는 왼쪽 끝에, 다른 포인터는 오른쪽 끝에 둡니다. 두 포인터는 서로 마주 보며 천천히 간격을 좁혀 갑니다.
left = 0
right = len(a) - 1끝을 안쪽으로 이동하기
각 단계에서는 포인터 하나만 정확히 안쪽으로 이동합니다. 배열의 순서를 보고 목표에 가까워지려면 어느 쪽을 움직여야 하는지 결정합니다.
반복 조건
left < right인 동안 반복하십시오. 두 포인터가 만나거나 서로 지나치면 확인해야 할 모든 유효한 쌍을 확인한 것이므로 멈추면 됩니다.
while left < right:
# inspect a[left] and a[right]
pass현재 합 확인하기
a[left] + a[right]를 현재 후보값으로 보십시오. 이를 목표값과 비교하면 다음에 더 큰 값이 필요한지 더 작은 값이 필요한지 알 수 있습니다.
total = a[left] + a[right]너무 작을 때: 왼쪽 이동
합이 목표값보다 작으면 더 큰 값이 필요합니다. 배열이 오름차순으로 정렬되어 있으므로 왼쪽 포인터를 큰 값이 있는 오른쪽으로 이동하십시오.
if total < target:
left += 1너무 클 때: 오른쪽 이동
합이 목표값보다 크면 더 작은 값이 필요합니다. 합을 줄이도록 오른쪽 포인터를 더 작은 값이 있는 왼쪽으로 이동하십시오.
elif total > target:
right -= 1매 단계마다 작업을 버립니다
포인터를 한 번 이동할 때마다 다시 검사할 필요가 없는 쌍을 한꺼번에 제거합니다. 그래서 이 순회가 이차 시간이 아니라 선형 시간이 됩니다.
정답을 유지하는 이유
일치할 수 없는 쌍만 버리므로 올바른 답을 건너뛰지 않습니다. 이러한 안전성 덕분에 대회에서 두 포인터를 믿고 사용할 수 있습니다.
끝점 너머의 활용
같은 아이디어는 배열을 제자리에서 뒤집거나, 분할하거나, 병합하는 변형 문제에도 활용됩니다. 포인터가 만나는 방식을 익히면 이 문제들도 익숙하게 느껴질 것입니다.
간단히 확인하기
정렬된 배열을 양끝에서 훑으며 목표 합을 찾고 있습니다.
복습
두 포인터는 정렬된 배열을 양끝에서 훑으며 sorted 배열에서 left < right인 동안 매 단계 하나를 안쪽으로 이동합니다. 선형 시간에 올바르게 동작하며, 다양한 기법의 기반이 됩니다. 🚀
자주 묻는 질문
“정렬된 배열에서 투 포인터” 강의는 무료인가요?
네 — “정렬된 배열에서 투 포인터” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 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개 중 1번째 강의입니다.
“정렬된 배열에서 투 포인터” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Competitive Programming Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Competitive Programming Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 정렬된 배열에서 투 포인터
- 주어진 합을 만드는 쌍 찾기
- 제자리에서 중복 제거하기
- 정렬된 두 시퀀스 병합하기