원소들을 번호순이나 사전 순서와 같이 일정한 순서대로 열거하는 알고리즘
얼마나 빠른 시간 내에 정렬할지
메모리를 얼마나 써야 하는지
sort 함수(굉장히 빠른 nlogn), algorithm 헤더
하지만 STL을 쓸 수 없는 경우가 존재는 하기에 기본적인 정렬알고리즘에 대해서 어느정도 구현할 수 이어야 한다.
sort(a.begin(),a.end(), greater<> ());
정렬된 리스트에서 특정한 값의 위치를 찾아내는 알고리즘
마지막 부분 혹은 끄트머리를 어떻게 처리하느냐에 따라 결과가 달라지는 경우에 사용하게 된다.
upper_bound : 찾고자 하는 값을 최초로 초과하는 값 index의 주소를 반환
lower_bound : 찾고자 하는 값보다 크거나 같은 최초의 값 index의 주소를 반환
정렬되어 있을때만 사용가능, O(logn)
#include <iostream>
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <functional>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#define ll long long
#define len 1001
using namespace std;
int ans, i, j,n,m;
int main(void) {
freopen("input.txt", "r", stdin);
//ios_base::sync_with_stdio(false);
//cin.tie(0);cout.tie(0);
cin >> n;
vector<int> a(n);
for (i = 0; i < n; ++i) {
cin >> a[i];
}
sort(a.begin(), a.end());
for (i = 0; i < n; ++i) {
cout << a[i] << '\n';
}
}
절단기의 높이를 최대한 높게해서 나무를 최대한 적게 잘라 원하는 만큼의 나무를 가져가게 하는 문제이다.
높이가 이제 중간수가 되는 문제이다.
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <functional>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#define ll long long
#define len 1001
using namespace std;
int ans, i, j, n, m;
vector<int> a;
int main(void) {
freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
int high=0, low=0,mid=0;
for (i = 0; i < n; ++i) {
int temp;
cin >> temp;
a.push_back(temp);
low = max(low, temp);
}
int ans = 0;
int sum = 0;
while (high <= low) {
mid = (low+ high) / 2;
sum = 0;
for (int i = 0; i < a.size(); ++i) {
if (a[i] > mid) {
sum+= (a[i] - mid);
}
}
if (sum < m) {
low = mid - 1;
}
else {
ans = max(ans, mid);
high=mid+1;
}
}
cout << ans << '\n';
}
하지만 이것도 upper_bound와 lower_bound를 찾아내면 된다.
입국심사 역시 마지막에 남은 부분이 결과에 큰 영향을 미치기 때문에 이분탐색 문제로 분류된다.