#include <iostream>
#include <algorithm>
using namespace std;
static int nums[100001] = { 0, };
int main() {
int N, K;
cin >> N >> K;
for (int i = 0; i < N; ++i) {
cin >> nums[i];
}
sort(nums, nums + N);
int count = 0;
for (int i = 0; i < N - 2; ++i) {
int left = i + 1;
int right = N - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum == K) {
++count;
++left;
--right;
} else if (sum < K) {
++left;
} else {
--right;
}
}
}
cout << count << "\\n";
return 0;
}
세 수의 합 계산
int count = 0;
for (int i = 0; i < N - 2; ++i) {
int left = i + 1;
int right = N - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum == K) {
++count;
++left;
--right;
} else if (sum < K) {
++left;
} else {
--right;
}
}
}
nums[i]를 고정합니다.left 포인터로 설정하고, 세 번째 수를 right 포인터로 설정합니다.K와 같은지 확인합니다
K이면 count를 증가시키고, left는 오른쪽으로, right는 왼쪽으로 이동합니다.K보다 작으면 left를 오른쪽으로 이동하여 합을 증가시킵니다.K보다 크면 right를 왼쪽으로 이동하여 합을 감소시킵니다.