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
'🐣 알고리즘 삐약 > 💻 백준 삐약' 카테고리의 다른 글
31 삐약 : 백준 13300[바킹독 문제 풀이|배열|JAVA] (0) | 2023.10.18 |
---|---|
30 삐약 : 백준 10807[바킹독 문제 풀이|배열|JAVA] (0) | 2023.10.18 |
28 삐약 : 백준 2577[바킹독 문제 풀이 | 배열 | JAVA] (0) | 2023.10.10 |
27 삐약 : 백준 10808[바킹독 문제 풀이 | 배열 | JAVA] (0) | 2023.10.10 |
26 삐약 : 백준 1018[브루트 포스 | C++] (0) | 2022.06.30 |