https://www.acmicpc.net/problem/1253
내 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(input.readLine());
StringTokenizer st = new StringTokenizer(input.readLine());
int[] array = new int[n];
for(int i = 0; i < n; i++){
array[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(array);
long answer = 0;
for(int idx = 0; idx < n; idx++){ // 입력값만큼 반복
int left = 0;
int right = array.length - 1;
int target = array[idx]; // 비교대상
while(left < right){
int tmp = array[left] + array[right];
if(tmp == target){
if (left != idx && right != idx){
answer++;
break;
} else if (left == idx) {
// 포인터가 idx와 같아지면 틀릴수밖에 없다.
left++;
} else {
right--;
}
} else if(tmp > target){
// tmp가 target보다 크다면 너무 큰 수를 더한것
right--;
} else{
left++;
}
}
}
System.out.println(answer);
}
}
정렬과 투포인터를 사용하였다.
정렬 후 0번째 인덱스(가장 작은 값)와 맨 끝 인덱스(가장 큰값)을 더한 후 투포인터 방식대로 문제에서 요구하는 값을 찾아나가는 방식이다.
단, target의 인덱스가 투포인터의 인덱스에 겹치지 않도록 유의할 것.
'문제풀이 > 백준' 카테고리의 다른 글
[JAVA] DNA 비밀번호 - 백준 12891번 (0) | 2025.05.22 |
---|---|
[Python] 수들의 합 5 - 백준 2018번 (0) | 2025.05.22 |
[JAVA] 주몽 - 백준 1940 (0) | 2025.05.20 |
[JAVA] 최솟값 찾기 - 백준 11003번 (0) | 2025.05.20 |
[JAVA] 나머지 합 구하기 - 백준 10986번 (0) | 2025.05.20 |