Algorithm/수학

[알고리즘] 구름 해외주식투자 c++ // 소수점 절사방법, 비교방법, 로그값구하는법

Mini_96 2024. 6. 12. 22:16

https://level.goorm.io/exam/150257/00%EC%A6%9D%EA%B6%8C-%EC%A3%BC%EC%8B%9D%ED%88%AC%EC%9E%90%EC%9E%90-a/quiz/1

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io

 

1. 소수점 절사방법

ex)5.41에서 1을 절사(버리기)하려면

10을곱한후 floor 하면된다

5.41 -> 54.1 -> 54

 

2. 소수점 비교방법

직접비교 : | a- b| < 0.00001 (앱실론) 이면 같은거임

10^n 을 곱해서 정수로 바꾼후 비교하는걸 추천함!

값이 중요한게 아니라 대소만 보면되므로 정수로 바꿔서 == 비교가 정확한듯?

 

2.5 .로그값구하는법

log2 함수를 쓰면된다.

log 2 (10) 만 = 16 이다.

// function to evaluate natural logarithm base-e
double value2(double d)
{
    return log2(d);
}


// driver program to test the above function
int main()
{
    double d = 100000;
    cout << "The logarithm value(base-e) of " << d
        << " is " << value2(d) << endl;

    return 0;
}

 

3. 전체코드

#include <bits/stdc++.h>
using namespace std;

int n;
vector<pair<int,double>> vec; //idx , v*w

bool cmp(pair<int,double> p1, pair<int,double> p2){
	if(p1.second==p2.second){ //가격이 같다면
		return p1.first<p2.first; //회사번호 작은순
	}
	return p1.second>p2.second; //가격큰순
}
int main() {
	char input[100];
	cin >> n;
	for(int i=0;i<n;++i){
		double v,w,tmp;
		cin>>v>>w;
		tmp=v*w*10;
		tmp=floor(tmp);
		vec.push_back({i+1,tmp});
	}
	sort(vec.begin(),vec.end(),cmp);
	
	for(auto p : vec){
		cout<<p.first<<" ";
		//cout<<p.first<<" "<<p.second<<"\n";
	}
	return 0;
}