투 포인터 알고리즘
- 1차원 배열에서 두 개의 포인터를 조작해가면서 원하는 결과를 얻는 알고리즘이다.
- 투 포인터 알고리즘을 이용해 O(N^2)에서 O(NlogN)으로 개선할 수 있다.
예시
- SUM =5 인 경우의 수 구하기
- 위의 과정을 배열의 인덱스가 N일때 즉 모두 확인했을 때 반복문 종료!
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package twoPointer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_BJ_2003_수들의합2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int [] arr = new int[N];
st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int start=0, end=0, sum=0, cnt=0;
while(true) {
if(sum>=M) sum -= arr[start++];
else if(end==N) break;
else sum += arr[end++];
if(sum==M) cnt++;
}
System.out.println(cnt);
}
}
|
cs |
'정리 > 자료구조+알고리즘' 카테고리의 다른 글
다익스트라(Dijkstra) 알고리즘 (0) | 2021.09.04 |
---|---|
이진 탐색 (Binary Search) 알고리즘 (0) | 2021.07.05 |
세그먼트 트리(Segment Tree) (0) | 2021.07.01 |
위상정렬 (0) | 2021.06.18 |
비트마스크 (BitMask) (0) | 2021.04.21 |