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
문제
풀이
투포인터를 써야하는 문제이다.
i < j 를 항상 만족해야 하므로 , start < end 가 만족해야한다. 이걸 안해서 틀렸었음 ..
1. 정렬된 배열이 필요.
2. 왼쪽맨끝 과 오른쪽 맨끝에서 순차적으로 번갈아 가면서 조금씩 접근
조건을 만족한다면 end,start 인덱스 동시에 조정
조건을 만족하지 않는다면 둘 중 하나만 조정
3. 인덱스가 교차하게 되는 순간에 종료
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
|
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).sorted().toArray();
int target = Integer.parseInt(br.readLine()), cnt = 0;
int start = 0, end = n-1;
while(start < end){
int sum = input[start] + input[end];
if(sum == target){
end--; start++;
cnt++;
}else if(sum>target)
end--;
else
start++;
}
System.out.println(cnt);
}
}
|
cs |
'알고리즘,PS > 백준' 카테고리의 다른 글
[BOJ] 백준 [1197] 최소 스패닝 트리 JAVA (0) | 2021.09.09 |
---|---|
[BOJ] 백준 [1806] 부분합 JAVA (0) | 2021.09.08 |
[BOJ] 백준 [1654] 랜선 자르기 JAVA (0) | 2021.09.06 |
[BOJ] 백준 [10816] 숫자카드2 JAVA (0) | 2021.09.06 |
[BOJ] 백준 [1920] 수찾기 JAVA (0) | 2021.09.06 |