문제링크 : https://www.acmicpc.net/problem/1253
import java.io.*;
import java.util.*;
public class BOJ1253 {
static int n, cnt;
static int[] arr;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
arr = new int[n];
for (int i=0; i<n; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
for (int i=0; i<n; i++){
binarySearch(arr[i], i);
}
System.out.println(cnt);
}
static void binarySearch(int x, int idx){
int start = 0;
int end = n-1;
while (start<end){
if (start == idx){
start++;
continue;
} else if (end == idx) {
end--;
continue;
}
int sum = arr[start]+arr[end];
if (x == sum){
cnt ++;
return;
} else if (x > sum) {
start++;
} else {
end--;
}
}
}
}
해설 : 정렬 후 투포인터를 이용해서 풀이. 풀이 시 주의해야할 점은 좋은 수를 구할때 자기자신이 더해지는 경우는 포함하면 안된다는 것이다.
함수에 인덱스 번호를 같이 넘겨주어, start와 end가 인덱스 번호가 같으면 한칸씩 땡겨서 다시 탐색하는 방식으로 구현하였다.
'Algorithm > Java' 카테고리의 다른 글
[백준] 14658 하늘에서 별똥별이 빗발친다 (0) | 2024.03.14 |
---|---|
[백준] 19941 햄버거 분배 (0) | 2024.03.11 |
[백준] 2234 성곽 (0) | 2024.03.09 |
[백준] 1940 주몽 (1) | 2024.03.06 |
[백준] 1806 부분합 (1) | 2024.03.04 |