코딩 테스트

[코딩테스트 22일차] BAEKJOON 25305번 : 커트라인

sunlight-dby 2025. 5. 27. 00:19

[BAEKJOON 25305번 : 커트라인]

[문제]


[고찰]

해당 문제는 점수들을 입력받고, 내림차순으로 정렬하여 k번째 점수를 출력하기만 하면 되는 쉬운 문제입니다.

다만, sort 함수를 내림차순으로 정렬하는 것을 몰랐어서 정리합니다.


[개념]

std : : sort

 

오름차순 정렬

std::sort(v.begin(), v.end());

 

sort 함수는 오름차순 정렬이 기본이며, 끝주소는 포함되지 않습니다.

STL에서 제공하는 함수 객체(Function Object, 기본 비교자)로 오름차순 정렬을 할 때 사용하는 비교자이지만, 오름차순 정렬이 기본인 sort 함수에서는 명시하지 않아도 동작은 같습니다.

 

내림차순 정렬

내림차순 정렬을 하기 위해서는 STL에서 제공하는 함수 객체(기본 비교자)인 greater<T>( )가 필요합니다.

std::sort(v.begin(), v.end(), greater<T>());

 

사용자 정의 기준 정렬

람다를 사용하면, 복잡한 조건으로 정렬하는 것이 가능합니다.

std::sort(v.begin(), v.end(), [](int a, int b)
{
    return a > b;  // 내림차순
});

[정리]

자주 사용하는 함수에 대해 깊이 알아볼 생각을 하지 않은 것이 반성되는 문제였습니다.


[Solution]

#include <iostream
#include <vector>     
#include <algorithm>  

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);

	int N, k;
	vector<int> range;
	
	cin >> N >> k;

	while (N--)
	{
		int score;
		cin >> score;
		range.push_back(score);
	}

	// 오름차순 정렬하여, 뒤에서 k번째 점수 출력
	sort(range.begin(), range.end());
	cout << range[range.size() - k];
    
    // 내림차순 정렬하여, k번째 점수 출력
    // sort(range.begin(), range.end(), greater<int>());
    // cout << range[k - 1];

	return 0;
}