https://www.acmicpc.net/problem/1092
1092번: 배
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보
www.acmicpc.net
[난이도] Gold5
[유형] Greedy
[풀이]
크레인의 용량과 박스의 크기를 내림차순을 해준 뒤
1번의 사이클에서 가장 들 수 있는 무게가 큰 크레인부터 가장 큰 박스를 매칭시켜주면 된다.
만약 박스가 선택되었으면 erase 연산으로 vector에서 지워주면서 반복한다.
#include <cstdio> #include <algorithm> #include <vector> using namespace std; int N,M; vector<int> a,b; bool cmp(int a,int b){ return a>b; } int main(){ scanf("%d",&N); a.resize(N); for(int i=0;i<N;i++) scanf("%d",&a[i]); scanf("%d",&M); b.resize(M); for(int i=0;i<M;i++) scanf("%d",&b[i]); sort(a.begin(),a.end(),cmp); sort(b.begin(),b.end(),cmp); if(a[0]<b[0]) { puts("-1"); return 0; } int ans =0; while(b.size()!=0){ for(int i=0;i<a.size();i++){ for(int j=0;j<b.size();j++){ if(a[i]>=b[j]){ b.erase(b.begin()+j); break; } } } ans++; } printf("%d",ans); }
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/1092.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 1963 : 소수 경로 (C++) (0) | 2021.03.25 |
---|---|
[BOJ/백준][Gold5] 2493 : 탑 (C++) (0) | 2021.03.25 |
[BOJ/백준][Gold5] 17144 : 미세먼지 안녕! (C++) (0) | 2021.03.25 |
[BOJ/백준][Gold2] 10423 : 전기가 부족해 (C++) (0) | 2021.03.25 |
[BOJ/백준][Gold2] 1670 : 정상 회담 2 (C++) (0) | 2021.03.15 |