난이도: 골드 4
풀이: 투 포인터 알고리즘을 적용한다. 시작 지점에서 포인터를 배열의 시작점과 끝점에 위치하여 차례로 포인터 간의 위치를 줄여가는 알고리즘을 이용한다. 참고로 배열 A의 숫자 크기는 플러스 마이너스 무려 10억까지 지정할 수 있게 해야 하므로, 데이터형은 int보다는 long를 이용해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import java.io.*; import java.util.*; public class P1253 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); long A[] = new long[N]; st = new StringTokenizer(br.readLine()); for (int i = 0; i < N; i ++) { A[i] = Long.parseLong(st.nextToken()); } Arrays.sort(A); int count = 0; for (int k=0; k < N; k++) { long find = A[k]; int i = 0; int j = N-1; while (i < j) { if (A[i] + A[j] == find) { if (i != k && j != k) { count ++; break; } else if (i == k) { i ++; } else if (j == k) { j --; } } else if (A[i] + A[j] < find) { i ++; } else { j --; } } } System.out.println(count); } } | cs |
'Algorithm (Java) > Data structure' 카테고리의 다른 글
배열과 리스트: DNA 비밀번호 (백준 12891) (0) | 2023.11.15 |
---|---|
配列とリスト: スライディングウィンドウ (0) | 2023.11.15 |
배열과 리스트: 주몽의 명령 (백준 1940) (0) | 2023.11.14 |
배열과 리스트: 연속된 자연수의 합 구하기 (백준 2018) (0) | 2023.11.09 |
配列とリスト: Two Pointersアルゴリズム (0) | 2023.11.09 |