끄적끄적 코딩
article thumbnail
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

검색 태그