1. 유형
두 포인터
2. 풀이법
단순히 이중for문을 사용하면 시간 초과가 난다
그렇기 때문에 정렬후, 이분탐색을 사용해야한다
3. 코드
import java.util.Arrays;
import java.util.Scanner;
public class back_3273두수의합 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int inp[] = new int[N];
for (int i = 0; i < N; i++) {
inp[i] = sc.nextInt();
}
int x = sc.nextInt();
Arrays.sort(inp);
int answer=0;
for (int i = N-1; i >=0 ; i--) {
int mid = i/2;
if(inp[i]+inp[mid] > x) {
while(mid!=-1) {
if(inp[i]+inp[mid]==x) {
answer++;
break;
}
mid--;
}
}
else if(inp[i]+inp[mid] < x) {
while(mid!=i) {
if(inp[i]+inp[mid]==x) {
answer++;
break;
}
mid++;
}
}else if(inp[i]+inp[mid]==x) {
answer++;
}
}
System.out.println(answer);
}
}
//
중앙값을 찾은 후, 타깃보다 크면 mid를 하나씩 줄이면서 합을 비교.
if(inp[i]+inp[mid] > x)
중앙값을 찾은 후, 타깃보다 크면 mid를 하나씩 늘이면서 합을 비교.
else if(inp[i]+inp[mid] < x)
'알고리즘 > 백준' 카테고리의 다른 글
[백준 - 1946] 실버1 신입 사원 (그리디) (0) | 2020.10.03 |
---|---|
[백준 - 2531] 실버1 회전 초밥 (투포인터) (0) | 2020.10.03 |
[백준 - 17135] 골드4 캐슬디팬스 (구현) (0) | 2020.10.02 |
[백준 - 11497] 실버2 통나무 건너뛰기 (0) | 2020.09.30 |
[백준 - 19539] 실버1 사과나무 (그리디) (0) | 2020.09.30 |