🐣 알고리즘 삐약/💻 백준 삐약

29 삐약 : 백준 3237 [바킹독 문제 풀이|배열|투포인터| JAVA]

우주수첩 2023. 10. 17. 10:59
728x90

https://www.acmicpc.net/problem/3273

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

 

 

1차 시도 : 시간 초과

package BKD_0x2_Array;

import java.util.Scanner;

public class BOJ_3273 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] arr = new int[n];

        for(int i=0;i<n;i++){
            arr[i]=sc.nextInt();
        }
        int x = sc.nextInt();

        System.out.println(get_pair_num(arr,x));
    }


    public static int get_pair_num(int[] arr, int x){
        int count =0;
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<i;j++){
                if(arr[i]+arr[j] == x) count++;
            }
        }
        return count;
    }
}

 

 

2차 시도 : 투 포인터

package BKD_0x2_Array;

import java.util.Arrays;
import java.util.Scanner;

public class BOJ_3273 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] arr = new int[n];

        for(int i=0;i<n;i++){
            arr[i]=sc.nextInt();
        }
        int x = sc.nextInt();


        System.out.println(get_pair_num(arr,x));
    }


    public static int get_pair_num(int[] arr, int x){
        Arrays.sort(arr);
        int count = 0;
        int lp = 0;
        int rp = arr.length-1;

        while(lp<rp){
            int current_sum = arr[lp] + arr[rp];
            if(current_sum == x) count++;

            if(current_sum < x) {
                lp++;
            }else {
                rp--;
            }
        }

        return count;
    }
}

 

 

 

 

728x90