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 br = new BufferedReader((new InputStreamReader(System.in)));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int [] num = new int[N]; // 수를 저장할 배열
for(int i=0; i<N; i++){ // 수 입력
num[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(num); // 수 정렬
int count = 0; // 좋은 수의 개수
for(int index=0; index<N; index++){
int find = num[index]; // 내가 찾는 값
int i = 0; // 두 개의 포인터 사용
int j = N-1; // i는 맨 처음부터 j는 마지막 배열부터
while(i<j){ // i가 j보다 이전 배열 일때까지 반복
if(num[i]+num[j]==find){ // 두 개의 포인터의 합이 내가 찾는 값과 일치할 때
if(i!=index&&j!=index){ // 두 개의 배열 인덱스가 찾고자 하는 배열 인덱스와는 달라야 함
count++; // 좋은 수 + 1
break; // 다음 배열(index+1)로 이동
} else if(i==index){ // i값이 index값과 같다면 i + 1
i++;
} else if(j==index){ // j값이 index값과 같다면 j - 1
j--;
}
} else if(num[i]+num[j]<find){ // 두 개의 포인터의 합이 내가 찾는 값보다 작을 때
i++; // 더 큰 수로 포인터 이동
} else { // 두 개의 포인터의 합이 내가 찾는 값보다 클 때
j--; // 더 작은 수로 포인터 이동
}
}
}
System.out.println(count); // 좋은 수의 개수
}
}
풀이 :
'코딩테스트 > 백준' 카테고리의 다른 글
[백준-자바] 1874번 스택 수열 / 2022.05.26 (0) | 2022.05.26 |
---|---|
[백준-자바] 17608번 막대기 / 2022.05.24 (0) | 2022.05.24 |
[백준-자바] 1940번 주몽 / 2022.05.21 (0) | 2022.05.21 |
[백준-자바] 2018번 수들의 합 5 / 2022.05.21 (0) | 2022.05.21 |
[백준-자바] 11660번 구간 합 구하기 5 / 2022.05.21 (0) | 2022.05.21 |