문제링크 : https://www.acmicpc.net/problem/2217
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int N;
vector<int> rope;
bool mySort(const int& a, const int& b){
return a>b;
}
int main(){
// freopen("../input.txt","rt",stdin);
scanf("%d",&N);
int tmp;
for(int i=0; i<N; i++){
scanf("%d",&tmp);
rope.push_back(tmp);
}
sort(rope.begin(), rope.end(), mySort);
int res = 0;
int resK = 0;
for(int i=0; i<N; i++){
// 이렇게 더 간단하게 깔끔하게 짤 수 있었다.
int w = rope[i] * (i+1);
if(w > res){
res = w;
}
/// 난 이렇게 할경우 1개만 찾고 끝난다
// 따라서 이 코드에는 오류가 있다.
// if(w > res){
// res = w;
// resK++;
// }
// else break;
}
printf("%d\n",res);
return 0;
}
문제를 잘못풀어 한번 틀렸는데, 그 이유는 만약 10 4 4 4 4 4 4 4 일 때 분명 10 하나를 드는것이 4 두개를 드는것보다 크다. 하지만 10 하나를 드는것보단 4를 8번드는것이 값이 더 크다. 나는 괜히 효율성을 따진다고 break를 넣었다가 이 경우를 넣지 못했다. 이러한 실수를 하지 않도록 주의해야하고 또 이런 반례도 있다는 것을 잊지 말아야한다.