#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;
        }
    }
}
  1. 첫 번째 수 nums[i]를 고정합니다.
  2. 두 번째 수를 left 포인터로 설정하고, 세 번째 수를 right 포인터로 설정합니다.
  3. 두 번째 수와 세 번째 수를 조정하여 세 수의 합이 K와 같은지 확인합니다
    1. 합이 K이면 count를 증가시키고, left는 오른쪽으로, right는 왼쪽으로 이동합니다.
    2. 합이 K보다 작으면 left를 오른쪽으로 이동하여 합을 증가시킵니다.
    3. 합이 K보다 크면 right를 왼쪽으로 이동하여 합을 감소시킵니다.