백준 2428 표절

Develop My Life·2023년 4월 11일
0

PS

목록 보기
31/32
post-thumbnail

📝 문제

📌 풀이

  • 현재 파일과 비교할 파일의 개수를 세면 되는 문제였다.
  1. 입력 배열을 오름차순 정렬한다.
  2. 맨 끝에서부터 기준 파일로 정하고 기준 파일과 비교해야할 파일의 개수를 센다.
  • 비교해야할 파일의 개수를 세는 방법
    • 기준 파일 * 0.9 값 이상의 첫번째 파일의 인덱스를 찾는다.
    • 기준 파일 인덱스에서 찾은 인덱스를 빼면 비교해야할 파일의 개수이다.

⭐ 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;
}

0개의 댓글