728x90

우선순위 큐로 문제를 풀었습니다.
A수열이 주어졌을때 오름차순의 B수열로
[B1-A1]....[Bn-An]의 값을 최소화 하는 문제입니다.
우선순위 큐에 A수열의 값을 넣습니다.
넣을 때 왼쪽에 있는 수의 개수만큼 빼서 넣어줍니다.
그리고 현재 뺀 값이 우선순위큐의 top보다 작으면,
top - 현재 값의 차를 결과값에 추가해줍니다.
<c++ />
#include <iostream>
#include <queue>
using namespace std;
int main(int argc, char *argv[]) {
int n;
int num;
long long result = 0;
priority_queue<int> pq;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num;
num -= i;
pq.push(num);
if (!pq.empty() && pq.top() > num) {
result += pq.top() - num;
pq.pop();
pq.push(num);
}
}
cout << result << endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 프로그래머스 - 문자열 압축 (0) | 2021.01.01 |
---|---|
[C++] 백준 17466번 N! mod P (1) (0) | 2020.03.22 |
[C++] 백준 1517번 버블 소트 (0) | 2020.03.06 |
[C++] 백준 1083번 소트 (0) | 2020.03.06 |
[C++] 백준 9576번 책 나눠주기 (0) | 2020.02.10 |