- 본 문제는 이분 탐색을 활용해야 한다.
- start는 0을 end는 입력한 숫자보다 -1을 대입한다.
- start가 end보다 작을 때까지 반복문을 실행해서 쌍의 개수를 출력한다.
// 백준 Silver3 - 3273(두 수의 합)
// 문제링크: https://www.acmicpc.net/problem/3273
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int arr[] = new int[num];
for(int i=0;i<arr.length;i++)
arr[i] = sc.nextInt();
Arrays.sort(arr); // 정렬하기
int target = sc.nextInt();
int sum = 0;
int cnt = 0;
int end = num-1;
int start = 0;
while(start<end) {
if (arr[start] + arr[end] == target) {
cnt++;
start++;
end--;
} else if (arr[start] + arr[end] < target)
start++;
else
end--;
}
System.out.println(cnt);
}
}
이분 탐색 문제를 풀어본 적이 꽤 많은데도 아직까지는 완전하게 익숙하지는 않은 것 같다. 다음에 이분 탐색 문제를 활용해야 하는 문제를 위해서라도 더 공부를 해야겠다.