Big Ben
Big Ben's Log
Big Ben
전체 방문자
오늘
어제
  • 전체 글 (80)
    • 파이썬 (23)
      • 파이썬 기초 (5)
      • 클래스 (6)
      • 자료구조 (4)
      • Tensorflow (3)
      • PyTorch (2)
      • konlpy (1)
      • anaconda (1)
    • 머신러닝 (3)
      • 선형회귀 (1)
      • Tree 기반 (1)
    • 딥러닝 (6)
      • NLP (2)
      • VISION (2)
      • TABULAR (0)
      • 딥러닝 서버 구축 (2)
    • 그래프 이론 (1)
      • 그래프마이닝 (1)
      • GNN (0)
    • 강화학습 (3)
      • 강화학습 기본 (3)
    • 인공지능 (5)
    • 추천시스템 (2)
      • 추천시스템 기초 (2)
    • Competitions (1)
    • 빅데이터 (8)
      • 하둡 (3)
      • 스파크 (4)
      • 클라우드 (1)
    • SQL (7)
      • MariaDB (2)
    • 논문 리뷰 (2)
    • 대학원 (0)
      • 데이터 사이언스 (0)
      • 경제학 (0)
    • 선형대수학 (7)
      • 선형대수 ICE BREAKING (1)
      • 벡터 (5)
      • 고윳값 (1)
    • 개인프로젝트 (0)
      • 포트폴리오 대시보드 + AI기반 주식 자동매매 (0)
    • 재테크 (1)
    • 자동차 (0)
    • 알고리즘 (11)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • TensorFlow
  • 데이터
  • 객체지향
  • 하둡
  • PYTHON
  • 파이썬기초
  • MariaDB
  • 파이썬
  • 인공지능
  • 백준
  • sql
  • 빅데이터
  • class
  • Baekjoon
  • 딥러닝
  • 자료구조
  • 머신러닝
  • 데이터베이스
  • mysql
  • 프로그래머스
  • 코테
  • 코딩테스트
  • 객체
  • 데이터사이언스
  • 선형대수
  • 선형대수학
  • pytorch
  • 프로그래밍
  • AI

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Big Ben

Big Ben's Log

투 포인터 (two pointer) 알고리즘이란?
알고리즘

투 포인터 (two pointer) 알고리즘이란?

2024. 4. 2. 09:48
반응형

투 포인터란?

'투 포인터'라는 기법은 문자열 string 또는 배열 array 기반의 알고리즘 문제에서 자주 사용할 수 있는 효과적인 기법입니다.

 

구체적으로 투 포인터도 여러 가지 방식이 있지만, 대개는 시작점과 끝점 또는 왼쪽 포인터와 오른쪽 포인터 두 지점을 기준으로 하는 문제 풀이 전략으로 볼 수 있습니다.

 

알고리즘 문제를 풀 때, 일반적인 반복문 접근 또는 브루트 포스 방식을 활용하다 보면 타임아웃에 직면하게 되는 경우가 종종 있습니다.

투 포인터 방식을 활용하면 복잡도를  한단계 낮출 수 있습니다. ==> $O(N^k)$ --> $O(N^{k-1})$ 

 

투 포인터는 크게 두가지 방법으로 응용할 수 있습니다.

  • 앞쪽 첫번째에서 시작하는 포인터 & 뒤쪽 끝에서 시작하는 포인터  
  • 빠른 포인터가 느린 포인터 보다 앞서는 형식

여기서는 양 끝쪽에서 시작하는 방식인 투 포인터에 대해 간략하게 소개하겠습니다.

 

투 포인터 방식은 범위를 좁혀 나가며 문제를 푸는 방식입니다.

일반적으로 양 끝 투 포인터를 활용한다면, 배열이 정렬되어 있을 때 많이 유용합니다.

 

아래 그림은 두 수의 합이 타겟 값과 같은 지를 확인하는 예제 입니다. 

이 방식은 두 개의 이중 for문으로 쉽게 풀릴 수 있으나, $O(N^2)$ 만큼의 시간 복잡도가 걸립니다.

하지만 투 포인터 방식을 활용하면 복잡도와 공간 효율까지 잡을 수 있게 됩니다.

 

  1. 주어진 배열을 정렬합니다.
  2. 투 포인터는 양쪽 끝에서 각 포인터가 위치하게 됩니다.
  3. 두 포인터의 합과 타겟 값을 비교합니다.
    • 두 포인터의 합이 타겟보다 작다면, 왼쪽 포인터의 위치 +1
    • 두 포인터의 합이 타겟보다 크다면, 오른쪽 포인터의 위치 -1
  4. 두 포인터의 합이 타겟값과 같으면 종료, 아니면 포인터 이동하면서 반복 진행.

 

 

 

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

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

[python] 재귀 알고리즘 - 최대공약수 GCD - 유클리드 호제법  (0) 2024.04.27
[leetcode 42] Trapping Rain Water - hard  (0) 2024.04.01
[백준 19532] 수학은 비대면 강의입니다 / Cramer's Rule / 브루트 포스  (1) 2024.03.26
[백준 24313] 점근적 표기 1 문제 풀이 & 해설 - 파이썬  (0) 2024.03.24
[python] 등차수열과 등차수열의 합  (0) 2024.03.24
    '알고리즘' 카테고리의 다른 글
    • [python] 재귀 알고리즘 - 최대공약수 GCD - 유클리드 호제법
    • [leetcode 42] Trapping Rain Water - hard
    • [백준 19532] 수학은 비대면 강의입니다 / Cramer's Rule / 브루트 포스
    • [백준 24313] 점근적 표기 1 문제 풀이 & 해설 - 파이썬
    Big Ben
    Big Ben
    Data Scientist

    티스토리툴바