Open kyungseop opened 8 years ago
시간복잡도: O(N+K)
// use c++11
#include <vector>
#include <cstdio>
int f(std::vector<int> const& numbers, int const& k)
{
int kk = (k + 1) / 2;
int result = 0;
std::vector<int> remain(k);
for(auto const& number : numbers)
++remain[number % k];
for(int i = 1; i < kk; ++i)
result += remain[i] * remain[k - i];
result += remain[0] * (remain[0] - 1) / 2;
if(!(k % 2)) result += remain[kk] * (remain[kk] - 1) / 2;
return result;
}
int main()
{
int result = f({1, 3, 2, 6, 1, 2}, 3);
std::printf("%d\n", result);
return 0;
}
예) 임의의 배열 입력 1 3 2 6 1 2 임의의 수 K 입력 3
결과 5
설명: