[알고리즘] 투 포인터 알고리즘(Two Pointers Algorithm)

2020. 3. 5. 11:19·알고리즘
반응형

1차원 배열에서 연속되는 값들을 이용해서 문제를 해결해야할 때 두 개의 포인터를 이용해 원하는 결과를 얻는 알고리즘

 

대표 문제: https://www.acmicpc.net/problem/2003

 

2003번: 수들의 합 2

첫째 줄에 N(1≤N≤10,000), M(1≤M≤300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.

www.acmicpc.net

위 문제는 배열에서 i ~ j 부분합이 M을 만족하는 모든 경우의 수를 구하는 문제이다.

 

부분 배열의 시작과 끝을 가리키는 변수 s, e을 준비하고 부분합을 저장할 변수 sum을 준비한다.

 

다음을 반복한다. while(true)

    1. 현재 부분합이 M과 같다면 경우의 수 카운트++

    2. 현재 부분합이 M 이상이면 sum에서 s가 가리키는 원소의 값을 빼고 s++

    3. e == n 즉 e가 배열에 끝에 도달하면 break

    4. 현재 부분합이 M 미만이면 sum에 e가 가리키는 원소의 값을 더하고 e++

 

<C++ 소스코드>

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
#include <iostream>
#include <vector>
using namespace std;
 
int n, m;
int a[10000];
int main(void) {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
 
    cin >> n >> m;
 
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
 
    int res = 0, sum = 0, s = 0, e = 0;
 
    while (true) {
        if (sum == m) res++;
        if (sum >= m) sum -= a[s++];
        else if (e == n) break;
        else sum += a[e++];
    }
    cout << res;
 
 
 
    return 0;
}
Colored by Color Scripter
cs

 

 

참조
https://blog.naver.com/kks227/220795165570

반응형
저작자표시 (새창열림)

'알고리즘' 카테고리의 다른 글

[알고리즘] lower_bound, upper_bound  (0) 2023.07.21
[알고리즘] 단절선(bridge or cut edge)  (0) 2021.12.19
[알고리즘] 단절점(Articulation Points or Cut Vertices)  (0) 2021.12.19
[알고리즘] 에라토스테네스의 체 알고리즘  (0) 2020.03.04
[알고리즘] O(sqrt(N)) 소수 판정 알고리즘  (0) 2020.03.02
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 단절선(bridge or cut edge)
  • [알고리즘] 단절점(Articulation Points or Cut Vertices)
  • [알고리즘] 에라토스테네스의 체 알고리즘
  • [알고리즘] O(sqrt(N)) 소수 판정 알고리즘
슥지니
슥지니
개발 블로그
  • 슥지니
    슥지니의 코딩노트
    슥지니
  • 전체
    오늘
    어제
    • 분류 전체보기 (198)
      • 알고리즘 문제풀이 (158)
        • 백준 (158)
      • 알고리즘 (6)
      • Node.js (2)
        • MongoDB (1)
        • 기타 (1)
      • spring (0)
      • 가상화폐 (1)
        • 바이낸스(Binance) (1)
      • C++ 테트리스 게임 (0)
      • C++ (10)
      • 안드로이드 프로그래밍 (21)
        • 코틀린 (21)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    다이나믹 프로그래밍
    Kotlin
    시뮬레이션
    C++
    백트랙킹
    코틀린
    그리디
    dfs
    구현
    dp
    그래프
    콘솔
    콘솔 테트리스 게임
    C
    백준
    자료구조
    우선순위 큐
    BFS
    코틀린을 활용한 안드로이드 프로그래밍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
슥지니
[알고리즘] 투 포인터 알고리즘(Two Pointers Algorithm)
상단으로

티스토리툴바