※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1092번 문제인 배이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1092
1092번: 배
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보
www.acmicpc.net
무거운 화물을 옮길 수 있는 크레인이 정해져있다는 점에서 착안해, 매 초마다 "가장 무거운 짐을 옮길 수 있는 크레인"부터 순서대로 "그 크레인이 들 수 있는 짐"을 하나 옮기는 것을 반복해나가는 것으로 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
int N, M;
int lmt[50];
priority_queue<pair<int, int>> pq[50];
bool visited[10000];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++) cin >> lmt[i];
sort(lmt, lmt + N);
cin >> M;
for (int m = 0; m < M; m++) {
int x; cin >> x;
if (x > lmt[N - 1]) {
cout << -1;
return 0;
}
for (int i = 0; i < N; i++) {
if (x <= lmt[i]) pq[i].push(make_pair(x, m));
}
}
int ans = 0;
while (M) {
ans++;
for (int i = N - 1; i > -1; i--) {
while ((!pq[i].empty()) && visited[pq[i].top().second]) pq[i].pop();
if (!pq[i].empty()) visited[pq[i].top().second] = 1, M--;
}
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 25905 // C++] 장인은 도구를 탓하지 않는다 (0) | 2023.02.09 |
---|---|
[BOJ 2520 // C++] 팬케이크 사랑 (0) | 2023.02.09 |
[BOJ 11522 // C++] Sum Kind of Problem (0) | 2023.02.07 |
[BOJ 27433 // C++] 팩토리얼 2 (0) | 2023.02.07 |
[BOJ 27389 // C++] Metronome (0) | 2023.02.07 |