dev.Log

1253 투포인터 본문

알고리즘

1253 투포인터

초코푸딩 2022. 9. 8. 18:56
package acmicpc;

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

public class P1253 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());
        int Result = 0;
        long A[] = new long[N];
        StringTokenizer st = new StringTokenizer(bf.readLine());
        for(int i=0; i<N; i++) {
            A[i] = Long.parseLong(st.nextToken());
        }
        Arrays.sort(A);
        for(int k=0; k<N; k++) {
            long find = A[k];
            int i = 0;
            int j = N -1;
            //투포인터 알고리즘
            while(i < j) {
                if(A[i] + A[j] == find) {
                    //find는 서로 다른 두 수의 합이어야 함을 체크
                    if( i != k && j != k) {
                        Result++;
                        break;
                    } else if ( i==k ) {
                        i++;
                    } else if ( j==k ) {
                        j--;
                    }
                } else if (A[i] + A[j] < find) {
                    i++;
                } else {
                    j--;
                }
            }
        }
        System.out.println(Result);
        bf.close();
    }
}

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

스택 P1874  (0) 2022.09.12
Deque<Node> deque = new LinkedList<>();  (0) 2022.09.12
2018 연속합  (0) 2022.09.05
10986 나머지합구하기  (0) 2022.09.04
11659 구간합  (1) 2022.09.02
Comments