문제 설명:
내가 숫자를 입력하면, 1부터 입력한 숫자를 하나씩 더하면서
더한 결과가 입력한 숫자가 나오는 숫자들의 합을 구하기!
백준은 문제가 참 짜증나게 나온다.
나만 그런가?
처음에는 for문을 2개 돌리면 되지 않을까, 했는데 생각보다 잘 안됨
책을 보니깐, 이 문제는 공식이 있다.
투 포인터 알고리즘!
- A[i] + A[j] > K: j--; A[i] + A[j] < K: i++;
- A[i] + A[j] == K: i++; j--; count++;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class GoodNum {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
long[] A = new long[N];
StringTokenizer st = new StringTokenizer(br.readLine());
// 배열 넣기
for (int i = 0; i < N; i++) {
A[i] = Long.parseLong(st.nextToken());
}
Arrays.sort(A);
int count = 0;
for(int k=0; k<N; k++) {
long find = A[k];
int i = 0;
int j = N-1;
// 투 포인터 알고리즘
while(i<j) {
if (A[i] + A[j] == find) {
// find는 서로 다른 두 수의 합이어야 함을 체크
if (i!=k && j!=k) {
count++;
break;
} else if (i==k) {
i++;
} else if (j==k) {
j--;
}
} else if (A[i] + A[j] < find) {
i++;
} else {
j--;
}
}
}
System.out.println(count);
br.close();
}
}
for
문 대신 while
문을 사용했다!
정답~
더 자세한 설명은 집 가서 적어야징..