문제 링크 : www.acmicpc.net/problem/2217
문제 풀이는 다음과 같다.
1. 값을 입력 받고 내림차순으로 정렬한다.
2. 정답값을 내림차순으로 정렬된 배열의 맨 첫 번째 값으로 저장한다.
3. for문을 배열의 첫 번째 부터 마지막까지 진행한다.
정답값을 현재 정답값과 배열의 i번째 값 * i+1 중 큰 값으로 저장한다.
for(int i=1; i<n; i++) ans = max(ans,v[i]*(i+1));
결국 중요한 것은, i번째 값이 전체 무게 / 전체 갯수를 견딜수 있냐 없냐이다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool comp(int a, int b){
return a>b;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n = 0, ans = 0;
cin >> n;
vector<int> v(n);
for(int i=0; i<n; i++) cin >> v[i];
sort(v.begin(),v.end(),comp);
ans = v[0];
for(int i=1; i<n; i++) ans = max(ans,v[i]*(i+1));
cout << ans << "\n";
return 0;
}
'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글
백준 2636번 치즈 (C++) (0) | 2021.05.03 |
---|---|
백준 16234번 인구이동 (C++) (0) | 2021.05.02 |
백준 2290번 LCD Test (C++) (0) | 2021.04.30 |
백준 15685번 드래곤커브 (C++) (0) | 2021.04.28 |
백준 14890번 경사로 (C++) (0) | 2021.04.27 |