⭐ c++를 사용하는 경우 자료형에 주의해야한다. float 자료형을 하면 정확도는 소수점 아래 6자리, double 형은 소수점 아래 15자리이다. 곱하기 0.9를 할 때 float 자료형을 하면 정확도 때문에 틀렸다고 나왔다. 정확한 계산을 위해서는 혹시 모르니 double로 계산하는 것이 좋을 것 같다. 또한 결과를 저장하는 자료형도 int가 아닌 long long으로 설정해야 정답으로 처리되었다.
//난이도 : 실버3
//시작 : 16:30
//끝 : 17:20
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<int> F;
int N;
cin >> N;
for (int i = 0; i < N; i++) {
int tmp;
cin >> tmp;
F.push_back(tmp);
}
sort(F.begin(), F.end()); //오름차순 정렬
long long result = 0; // 자료형에 주의
for (int i = F.size() - 1; i > 0; i--) {
double thres = (double)F[i] * (double)9 / (double)10; // double은 소수점 이하 15자리, float는 소수점 이하 6자리
long long idx = lower_bound(F.begin(), F.end(), thres) - F.begin(); //자료형에 주의
result += (i - idx);
}
cout << result << '\n';
return 0;
}