백준 1253: 좋다

uni.gy·2023년 8월 1일
0

알고리즘

목록 보기
16/61

문제

풀이

먼저 배열을 정렬해준다.
배열 원소를 차례대로 방문해서 시작 0 끝 n-1 로 지정해서 투 포인터를 ㅏ사용해서 두 수의 합이 방문한 배열 원소와 같은지 확인해준다.
주의할 점은 l==i, r==i인 경우를 좋다로 체크하면 안된다.


코드

import java.io.*;
import java.util.*;

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

        int n=Integer.parseInt(br.readLine());
        int[] arr=new int[n];
        st=new StringTokenizer(br.readLine());

        for(int i=0;i<n;i++){
            arr[i]=Integer.parseInt(st.nextToken());
        }

        int ans=0;
        Arrays.sort(arr);
        for(int i=0;i<n;i++){
            int l=0;
            int r=n-1;
            while(l<r){
                long sum=arr[l]+arr[r];
                if(sum==arr[i]){
                    if(l==i)l++;
                    else if(r==i)r--;
                    else {
                        ans++;
                        break;
                    }
                }
                if(sum<arr[i])l++;
                else if(sum>arr[i])r--;
            }
        }
        System.out.println(ans);
    }

    /*
10
1 2 3 4 5 6 7 8 9 10
     */

}

#투포인터

profile
한결같이

0개의 댓글