C++ STL의 sort는 문자열로 사전순으로 정렬해 준다는 것을 알고 있었기 때문에 출석부를 정렬하는 것 자체는 어렵지 않았다. 다만 double형 실수를 아무런 처리 없이 출력해주는 경우 110.40 같이 끝이 0으로 끝나는 실수를 110.4로 출력해버리는 문제가 발생했다.

이를 해결하기 위해 cout << fixed; 와 cout.precision()에 대해 살펴보자.

1.cout.precision() -> 표현하고자 하는 자리수를 정해주는 함수

즉, cout.precision(7); 을 선언해주고 123.456689를 출력하면

123.4567이 출력된다. 끝에 수가 6이 아닌 이유는 precision에 넘겨준 숫자 밖의 범위는 반올림 처리를 해주기 떄문이다.

 

2.cout << fixed; -> 소수점 이하만 다루게 해주는 역할!

 

따라서 1,2를 통해 아래와 같이 코드를 작성하여 문제를 해결할 수 있다.

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int n, k;
string name;
double height;

int main() {
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	cin >> n >> k;
	vector<pair<string, double>> people;
	for (int i = 0; i < n; i++) {
		cin >> name >> height;
		people.push_back({ name, height });
	}
	sort(people.begin(), people.end());
	cout << people[k - 1].first << " ";
	cout << fixed;
	cout.precision(2);
	cout << people[k-1].second;
	return 0;
}