[알고리즘] 두 포인터자료구조 | 알고리즘/탐색(Brute Force)2023. 12. 16. 15:40
Table of Contents
728x90
반응형
1. 두 포인터란?
포인터 두 개를 사용하여 배열이나 문자열을 탐색하는 알고리즘이다.
흔히 배열을 탐색하다 보면 완전탐색을 진행할 경우 O(N²)의 시간복잡도를 가진다. 하지만 투 포인터를 이용하면 동시에 포인터 두 개로 탐색하므로 O(N)의 시간 복잡도로 한 번에 탐색할 수 있다.
예시
https://www.acmicpc.net/problem/2230
#include<iostream>
#include<algorithm>
using namespace std;
int N, M, arr[100000], ans;
int main(void) {
ans = 100000000;
cin >> N >> M;
for (int i = 0; i < N; i++) cin >> arr[i];
sort(arr, arr + N);
for (int i = 0; i < N; i++) {
for (int j = i; j < N; j++) {
int temp = arr[j] - arr[i];
if (temp >= M) ans = min(ans, temp);
}
}
cout << ans;
return 0;
}
시간 복잡도를 보면 O(N²)이 된다. 하지만 두 포인터를 이용하면 O(N)해결할 수 있다.
3. 두 포인터와 이분 탐색
두 포인터로 해결할 수 있는 문제는 이분 탐색으로도 해결할 수 있고 그 반대도 가능하다. 따라서 두 가지 모두 익혀두는 것이 좋다.
728x90
반응형
'자료구조 | 알고리즘 > 탐색(Brute Force)' 카테고리의 다른 글
[알고리즘] 원하는 조건 내에서 탐색 알고리즘 (1) | 2023.12.31 |
---|---|
[알고리즘] 가장 긴 증가하는 부분 수열 O(n log n) (이분 탐색 풀이) (1) | 2023.12.18 |
[알고리즘] Parametric Search(매개변수 탐색) (0) | 2023.12.11 |
[알고리즘] 이분 탐색 (1) | 2023.12.06 |
브루트 포스(완전 탐색) 알고리즘 (0) | 2023.10.31 |
@BE_개발자 :: 경이로운 개발일기
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
도움이 되었다면 "❤️" 또는 "👍🏻" 해주세요! 문의는 아래 이메일로 보내주세요.