※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 15553번 문제인 난로이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/15553
먼저, 첫 친구가 오는 시점에 맞춰 난로를 키고 마지막 친구가 가는 시점에 맞춰 난로를 꺼야 함은 자명하다. 이 두 행동을 제외하고 생각하면 난로는 총
문제를 (난로를 처음 키고 마지막으로 끈 시간 사이의) 난로가 꺼져있는 시간을 최대화하는 문제로 바꿔 생각해보자. 난로를 한번 끄고 킬 때 추가적으로 얻을 수 있는 "난로가 꺼져있는 시간"은 (인접한 시간에 오는 두 친구의
아래는 제출한 소스코드이다.
#include <iostream>
#include <queue>
using namespace std;
int N, K;
priority_queue<int> pq;
int A[100000];
int ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> K; K--;
for (int i = 0; i < N; i++) cin >> A[i];
ans = A[N - 1] - A[0] + 1;
for (int i = 1; i < N; i++) pq.push(A[i] - A[i - 1] - 1);
while (K--) {
ans -= pq.top();
pq.pop();
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 19949 // C++] 영재의 시험 (0) | 2024.05.09 |
---|---|
[BOJ 11391 // C++] 분배 (0) | 2024.05.08 |
[BOJ 25917 // C++] Prime Arrangement (0) | 2024.05.06 |
[BOJ 18231 // C++] 파괴된 도시 (0) | 2024.05.05 |
[BOJ 12742 // C++] 혼합물 (Small) (0) | 2024.05.04 |