문제
https://www.acmicpc.net/problem/1253
풀이 과정
처음에는 Ai 범위를 양수로 보고 2중 for문과 집합을 사용해서 풀었다. 하지만, Ai는 음의 정수, 0, 양의 정수를 모두 포함하기 때문에, 0 + 자기자신으로 true를 반환해서 틀렸다.
범위를 다시 파악하고 나서는 배열을 정렬한 후, 가장 왼쪽 값과 가장 오른쪽 값을 더해가면서
값이 현재값보다 작으면 더 큰 수를 더해줘야 하므로 left+1을 해주고, 크면 right-1을 하여 가능할 것 같은 값만 빠르게 비교하도록 하였다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[] arr;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
if(N<=2){
System.out.println(0);
return;
}
arr = new int[N];
for(int i=0; i<N; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int result = 0;
for(int i=0; i<N; i++){
result += canMake(i);
}
System.out.println(result);
}
public static int canMake(int idx){
int l = 0, r = N-1, now = arr[idx];
while(true){
if(l==idx) l++;
else if(r==idx) r--;
if(l >= r) break;
int sum = arr[l] + arr[r];
if(sum == now){
return 1;
}
else if(sum < now){
l++;
}
else{
r--;
}
}
return 0;
}
}
결과
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Java] 백준 22251번 : 빌런 호석 (0) | 2023.03.29 |
---|---|
[Java] 백준 2075번 : N번째 큰 수 (0) | 2023.03.27 |
[Java] 백준 1863번 : 스카이라인 쉬운거 (0) | 2023.03.24 |
[Java] 백준 9081번 : 단어 맞추기 (0) | 2023.03.21 |
[Java] 백준 2138번 : 전구와 스위치 (0) | 2023.03.20 |