투포인터 (Two Pointers)

2023. 4. 3. 21:57·Algorithm

배열에서 두 개의 포인터를 사용하여 원하는 결과를 얻는 방법

두 개 포인터의 배치 방법

 

- 같은 방향에서 시작 : 첫 번째 원소에 둘다 배치

- 서로 다른 방향에서 시작 : 첫 번째 원소와 마지막 원소에 배치

다중 for문의 복잡도를 좀 더 선형적으로 풀 수 있음

 

sum의 값이 5보다 작다면, end를 1 늘려준다.

 

sum의 값이 여전히 5보다 작으니 end를 1 늘려준다.

 

 

sum의 값이 5보다 크니, start를 빼주고 값을 늘려준다.

 

 

sum의 값이 5와 같아져서 cnt를 1 올려주고, start와 end를 둘 다 올려준다.

 

 

sum의 값이 5와 같아져서 cnt를 1 올려주고, start와 end를 둘 다 올려준다.

 

 

 

sum이 5보다 크니, start를 빼주고 옆으로 움직인다.

 

sum의 값이 5와 같으니 cnt를 늘려준다

 

백준 2003 문제

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class baeckjoon_2003 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        StringTokenizer st2 = new StringTokenizer(br.readLine());
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st2.nextToken());
        }

        int sum = 0;
        int start = 0, end = 0, count = 0;

        while(true){
            if(sum >= m){
                sum -= arr[start++];
            }
            else if(end == n){
                break;
            }else{
                sum += arr[end++];
            }

            if(sum == m){
                count++;
            }
        }
        System.out.println(count);
    }
}

'Algorithm' 카테고리의 다른 글

이진탐색(Binary Search)  (3) 2023.04.06
힙(Heap)  (0) 2023.04.02
그래프  (1) 2023.03.29
이진 탐색 트리 자료구조 2  (1) 2023.03.28
이진 탐색 트리 자료구조  (1) 2023.03.28
'Algorithm' 카테고리의 다른 글
  • 이진탐색(Binary Search)
  • 힙(Heap)
  • 그래프
  • 이진 탐색 트리 자료구조 2
JAVALA
JAVALA
워니‘s Diary
  • JAVALA
    정신줄 JAVA라
    JAVALA
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • Codding_Test (11)
        • BaekJoon (7)
        • Programmers (3)
      • Algorithm (11)
      • Daily (4)
        • memoir (4)
      • TroubleShooting (8)
        • InteliJ (1)
        • Server (1)
        • Infra (0)
        • DB (0)
      • Computer Science (1)
      • JAVA (8)
      • Javascript (0)
      • Spring Boot (7)
      • API (2)
      • Server (0)
      • DB (2)
        • ORACLE (1)
      • Infra (2)
      • Refactoring (0)
      • Plugin (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    백엔드 개발자
    스프링부트
    개발자 부트캠프
    자바
    자바 스프링
    자바 메소드
    자바 스프링부트
    개발자
    프로그래머스
    개발자 국비
    제로베이스
    자바 클래스
    프론트엔드 개발자
    springboot
    spring boot
    트리 자료구조
    백준
    개발자 비전공자
    자바 알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JAVALA
투포인터 (Two Pointers)
상단으로

티스토리툴바