https://www.acmicpc.net/problem/1253
1253번: 좋다
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
www.acmicpc.net
package Test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 투 포인터
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// 숫자의 개수 N 입력받기
int N = Integer.parseInt(st.nextToken());
// 배열
int[] A = new int[N];
// 배열에 N개의 수 입력받기
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++)
{
A[i] = Integer.parseInt(st.nextToken());
}
// 오름차순으로 정렬하기
Arrays.sort(A);
int sum = 0; // 두 수의 합
int count = 0; // 결과
for(int i = 0; i<N; i++)
{
int find = A[i]; // find는 배열의 i번째 수
int start_index = 0; // 시작 인덱스
int end_index = N-1; // 끝 인덱스
// System.out.println("find = " + find);
// 투 포인터 알고리즘
while(start_index < end_index) // 시작 인덱스가 끝 인덱스보다 작을 때까지
{
sum = A[start_index] + A[end_index];
if(sum == find) // 합과 find가 같으면서
{
if(start_index != i && end_index != i)
{
// System.out.println("sum = find = " + sum);
// System.out.println("start_index =" + start_index);
// System.out.println("end_index =" + end_index);
count++;
break;
}
else if (start_index == i)
{
start_index++;
}
else if (end_index == i)
{
end_index--;
}
}
else if(sum > find) // 합이 find보다 크면
{
end_index--;
}
else if(sum < find) // 합이 find보다 작으면
{
start_index++;
}
}
// System.out.println("count = " + count + "\n");
}
System.out.print(count);
br.close();
}
}
'잡동사니 > [2022] 회로이론' 카테고리의 다른 글
[백준/Java] 2750번 수 정렬하기 1 (버블정렬) (0) | 2023.01.10 |
---|---|
정렬의 종류 (0) | 2023.01.10 |
[백준/Java] 1940번 주몽 (0) | 2023.01.09 |
[백준/Java] 2018번 수들의 합5 (투포인터) (0) | 2023.01.09 |
[백준/Java] 10986번 (0) | 2023.01.08 |