Deep_Dev
article thumbnail

1. ๋‘ ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ ( two pointers algorithm )

2. ๊ณตํ†ต์›์†Œ๊ตฌํ•˜๊ธฐ( two points algorithm )

3. ์ตœ๋Œ€ ๋งค์ถœ( Sliding window )

4. ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด ( ๋ณตํ•ฉ์  ๋ฌธ์ œ )

5.1 ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ ( two pointers )

5.2 ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ ( ์ˆ˜ํ•™ )

6. ์ตœ๋Œ€ ๊ธธ์ด ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด ( ๋ณตํ•ฉ์  ๋ฌธ์ œ )

 


1. ๋‘ ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ ( two pointers algorithm )

 

 

import java.util.*;
public class Main {
    public ArrayList<Integer> solution(int n, int m, int[] a, int[] b){
        ArrayList<Integer> answer=new ArrayList<>();
        int p1=0, p2=0;
        while(p1<n && p2<m) {
            if (a[p1] < b[p2])
                answer.add(a[p1++]); // add ํ›„ p1 ์ฆ๊ฐ€
            else
                answer.add(b[p2++]);
        }
        while(p1<n) answer.add(a[p1++]);
        while(p2<m) answer.add(b[p2++]);
        return answer;
    }
    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int[] a=new int[n];
        for(int i=0; i<n; i++){
            a[i]=kb.nextInt();
        }
        int m=kb.nextInt();
        int[] b=new int[m];
        for(int i=0; i<m; i++){
            b[i]=kb.nextInt();
        }
        for(int x : T.solution(n,m,a,b)) System.out.print(x+" ");
    }
}

 

 

 

2. ๊ณตํ†ต์›์†Œ๊ตฌํ•˜๊ธฐ( two points algorithm )

 

 

 

import java.util.*;
public class Main {
    public ArrayList<Integer> solution(int n, int m, int[] a, int[] b){
        ArrayList<Integer> answer=new ArrayList<>();
        Arrays.sort(a); // ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        Arrays.sort(b);
        int p1=0, p2=0;
        while(p1<n && p2<m){ // two point ์•Œ๊ณ ๋ฆฌ์ฆ˜
            if(a[p1]==b[p2]){
                answer.add(a[p1++]);
                p2++;
            }
            else if(a[p1]<b[p2]) p1++; // ์ž‘์€์ชฝ ์ฆ๊ฐ€
            else p2++;
        }
        return answer;
    }
    public static void main(String[] args){
       Main T=new Main();
       Scanner kb=new Scanner(System.in);
       int n=kb.nextInt();
       int[] a=new int[n];
       for(int i=0; i<n; i++){
           a[i]=kb.nextInt();
       }
       int m=kb.nextInt();
       int[] b=new int[m];
       for(int i=0; i<m; i++){
           b[i]=kb.nextInt();
       }
       for(int x : T.solution(n,m,a,b)) System.out.print(x+" ");
    }
}

 

 

 

3. ์ตœ๋Œ€ ๋งค์ถœ( Sliding window )

 

 

import java.util.*;
public class Main {
    public int solution(int n, int k, int[] arr){
        int answer=0;
        int sum=0;
        for(int i=0; i<k; i++) sum+=arr[i];
        answer=sum;
        for(int i=k; i<n; i++){
            sum+=(arr[i]-arr[i-k]); // sliding window
            answer=Math.max(answer,sum);
        }
        return answer;
    }
    public static void main(String[] args){
        Main T = new Main();
        Scanner kb=new Scanner(System.in);
        int n=kb.nextInt();
        int k=kb.nextInt();
        int [] arr=new int[n]; // ๋งค์ถœ array
        for(int i=0; i<n; i++){
            arr[i]=kb.nextInt();
        }
        System.out.print(T.solution(n,k,arr));
    }
}

 

 

 

4. ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด ( ๋ณตํ•ฉ์  ๋ฌธ์ œ )

 

 

import java.util.*;
public class Main {
    public int solution(int n, int k, int[] arr){
        int answer=0, sum=0, lt=0;
        for(int rt=0; rt<n; rt++){
            sum+=arr[rt];
            if(sum==k)
                answer++;
            while(sum>=k){
                sum-=arr[lt++];// ๋บ€ ํ›„ ์ฆ๊ฐ€
                if(sum==k)
                    answer++;
            }
        }
        return answer;
    }
    public static void main(String[] args){
        Main T = new Main();
        Scanner kb=new Scanner(System.in);
        int n=kb.nextInt();
        int k=kb.nextInt();
        int [] arr=new int[n];
        for(int i=0; i<n; i++){
            arr[i]=kb.nextInt();
        }
        System.out.print(T.solution(n,k,arr));
    }
}

 

 

 

5.1 ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ ( two pointers )

 

 

import java.util.*;
public class Main {
    public int solution(int n){
        int answer=0, sum=0, lt=0;
        int m=n/2+1;
        int[] arr=new int[m];
        for(int i=0; i<m;i++) arr[i]=i+1; // 1๋ถ€ํ„ฐ m๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ array
        for(int rt=0; rt<m; rt++){
            sum+=arr[rt];
            if(sum==n)
                answer++;
            while(sum>=n){
                sum-=arr[lt++];
                if(sum==n)
                    answer++;
            }
        }
        return answer;
    }
    public static void main(String[] args){
        Main T = new Main();
        Scanner kb=new Scanner(System.in);
        int n=kb.nextInt();
        System.out.print(T.solution(n));
    }
}

 

 

6. ์ตœ๋Œ€ ๊ธธ์ด ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด ( ๋ณตํ•ฉ์  ๋ฌธ์ œ )

 

 

import java.util.*;
public class Main {
    public int solution(int n, int k, int[] arr){
        int answer=0, cnt=0, lt=0;
       for(int rt=0; rt<n; rt++){
           if(arr[rt]==0)
               cnt++;
           while(cnt>k){
               if(arr[lt]==0) cnt--;
               lt++;
           }
           answer=Math.max(answer,rt-lt+1);
       }
        return answer;
    }
    public static void main(String[] args){
        Main T = new Main();
        Scanner kb=new Scanner(System.in);
        int n=kb.nextInt();
        int k=kb.nextInt();
        int[] arr=new int[n];
        for(int i=0; i<n; i++){
            arr[i]=kb.nextInt();
        }
        System.out.print(T.solution(n,k,arr));
    }
}