ALGORITHM/BOJ
[백준] 3273 두 수의 합
0298
2022. 7. 25. 13:54
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
2022-07-25
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
|
import java.util.Arrays;
import java.util.Scanner;
public class Main3273 {
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();
int start = 0;
int end = n-1;
int answer = 0;
Arrays.sort(arr);
while(start < end) {
if(arr[start] + arr[end] > x) end--;
else if(arr[start] + arr[end] == x) {
answer++;
end--;
} else start++;
}
System.out.println(answer);
}
}
|
cs |
#문제풀이
투 포인터로 풀지 않아도 되겠지만 투 포인터로 풀었다.
양끝에서 포인터를 좁혀가면서 A[i] + A[j] = x인 모든 경우를 찾는 문제 (더 쉬운 방법이 있지만, 연습을 위해 투 포인터를 써봅시다.) |
오름차순으로 정렬 한 후 양 끝 (start, end)에서 해당 인덱스 값의 배열 값들의 합이 더 크거나 같으면 end인덱스 값을 한 칸 줄이고 작으면 start 인덱스 값을 한 칸 올렸다